stm32 RTC以及stlink调试的方法

历时四天终于成功搞定rtc实时时钟在stm32显示屏上显示。

首先:

1:初始化rtc

RTC_HandleTypeDef RTC_Handler;  //rtc句柄 要初始化的句柄,包含外设名字和设置rtc的寄存器的结构体函数等等

{

if(HAL_RTC_Init(&RTC_Handler)!=HAL_OK) return 1;

//********************HAL自带的初始化库函数,进去可以看到主要就是确定一些rtc-handlertypedef结构体成员的一些参数的范围:比如assert_param(IS_RTC_ALL_INSTANCE(hrtc->Instance));......成功初始化就返回一***************************//

    if(HAL_RTCEx_BKUPRead(&rtc_handletypedef,RTC_BKP_DR1)!=0x5050)
    {
        RTC_Set(2015,3,24,4,12,10);
        HAL_RTCEx_BKUPWrite(&rtc_handletypedef,RTC_BKP_DR1,0x5050);
    }

//****************RTC是一个独立的定时器

//当程序下载进去时,如果先前没有系统复位过,那么此时备份区域(BKP)有0x5050,因为上一次复位之后再下载程序写入了0x5050  错

BKP 当系统在待机模式下被唤醒,或系统复位或 电源复位时,他们也不会被复位。

也即是说第一次下载程序后在设置时间必须得在这个if语句外调用

**********************************************//

__HAL_RTC_ALARM_ENABLE_IT(&rtc_handletypedef,RTC_IT_ALRA);  //闹钟的中断使能
    __HAL_RTC_ALARM_ENABLE_IT(&rtc_handletypedef,RTC_IT_SEC); //秒钟的中断使能
    HAL_NVIC_SetPriority(RTC_IRQn,0x01,0x02);  //抢占优先级1,子优先级2
    HAL_NVIC_EnableIRQ(RTC_IRQn);//

}

注意,设置函数的入口参数要注意数据类型;

位数多的十六进制变量向位数低的16进制变量转换时要注意两个变量要一样类型,避免转换错误;

结构体里的数据的调用时也要注意他的数据类型

 

 

调试部分:

stlink调试时可以查看寄存器值和设置断点到你想要运行的那一步(不说了,说多了都是泪)。

 

 

总结:遇到的问题一定要写下来,记下来

 

你可能感兴趣的:(stm32 RTC以及stlink调试的方法)