設置 | 登錄 | 註冊

作者共發了1篇帖子。

【程序】STM32F103中的RTC時鐘精確到毫秒顯示時間

1樓 巨大八爪鱼 2017-4-4 20:07
#include <stm32f10x.h>

uint8_t seg8[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};

void delay(void)
{
    uint16_t i;
    for (i = 0; i < 20000; i++);
}

void ser_in(uint8_t data)
{
    uint8_t i;
    for (i = 0; i < 8; i++)
    {
        GPIOB->BRR = GPIO_BRR_BR9; // SCLK=PB9
        if (data & 0x80)
            GPIOB->BSRR = GPIO_BSRR_BS7; // DIO=PB7
        else
            GPIOB->BRR = GPIO_BRR_BR7;
        data <<= 1;
        GPIOB->BSRR = GPIO_BSRR_BS9;
    }
}

void par_out(void)
{
    GPIOB->BRR = GPIO_BRR_BR8; // RCLK=PB8
    GPIOB->BSRR = GPIO_BSRR_BS8;
}

void seg_scan(void)
{
    uint8_t i;
    uint32_t numbuf = (32767 - RTC->DIVL) * 1000 / 32768; // 小數部分: DIV的範圍是0~32767 (向下計數)
    numbuf += RTC->CNTL * 1000; // 整數部分
    for (i = 0; i <= 7; i++)
    {
        if (i == 3)
            ser_in(seg8[numbuf % 10] & 0x7f); // 顯示小數點
        else
            ser_in(seg8[numbuf % 10]);
        ser_in(1 << i);
        par_out();
        delay();
        numbuf /= 10;
    }
}

int main(void)
{
    // 配置RTC時鐘
    RCC->APB1ENR = RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN;
    PWR->CR = PWR_CR_DBP; // 允許寫入後備寄存器
    if ((RCC->BDCR & RCC_BDCR_RTCEN) == 0)
    {
        // 若RTC還沒有打開, 則初始化RTC
        if ((RCC->BDCR & RCC_BDCR_LSEON) == 0)
            RCC->BDCR |= RCC_BDCR_LSEON; // 開外部低速晶振LSE
        RCC->BDCR |= RCC_BDCR_RTCEN; // 打開RTC外設, 但暫不開始走時
       
        RTC->CRL |= RTC_CRL_CNF; // 進入RTC配置模式
        RTC->PRLH = 0;
        RTC->PRLL = 32767; // 定時1s (PRLH和PRLL寄存器只能寫不能讀)
        //RTC->CNTH = 0;
        //RTC->CNTL = 50; // 初始時間
        RTC->CRL &= ~RTC_CRL_CNF; // 保存設置
       
        RCC->BDCR |= RCC_BDCR_RTCSEL_0; // 選LSE作為RTC時鐘, 準備走時
        while ((RTC->CRL & RTC_CRL_RTOFF) == 0); // 等待設置生效
        // RTC從此處開始走時
    }
   
    // 配置GPIO口
    RCC->APB2ENR = RCC_APB2ENR_IOPBEN;
    GPIOB->CRL = 0x30000000;
    GPIOB->CRH = 0x00000033;
   
    while (1)
        seg_scan();
}

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。