超透彻的STM32讲解资料

上传人:鲁** 文档编号:562649897 上传时间:2022-09-15 格式:DOCX 页数:23 大小:65.52KB
返回 下载 相关 举报
超透彻的STM32讲解资料_第1页
第1页 / 共23页
超透彻的STM32讲解资料_第2页
第2页 / 共23页
超透彻的STM32讲解资料_第3页
第3页 / 共23页
超透彻的STM32讲解资料_第4页
第4页 / 共23页
超透彻的STM32讲解资料_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《超透彻的STM32讲解资料》由会员分享,可在线阅读,更多相关《超透彻的STM32讲解资料(23页珍藏版)》请在金锄头文库上搜索。

1、这部分的内容实现的功能是将时间传输到上位机。第一串口的配置,前面已经详细的讲过,这里不再讲解。第二中断的配置,由于我们需要时间每秒自加一次,一次需要用到中断, 在中断服务程序中实现秒的自加,前面也已讲过中断的配置,这里就不详细讲解,只给出代码* 函数名:NVIC_Configuration* 描述配置 RTC秒中断的主中断优先级为1,次优先级为0* 输入无* 输出无* 调用外部调用*/void NVIC_Configuration(void)NVIC_InitTypeDef NVIC_InitStructure;/*设置先占优先级1位,从占优先级3位*/NVIC_PriorityGroupCo

2、nfig(NVIC_PriorityGroup_1);/*选择RTC的IRQ通道*/NVIC_InitStructure.NVIC_IRQChannel =RTC_IRQn;/*设置中断先占优先级为1*/NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;/*设置中断从占优先级为1*/NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;/*使能RTC的IRQ通道*/NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;NVIC_Init(&NVIC_I

3、nitStructure);第三:对于RTC的使用,首先我们要判断是否是第一次使用RTC,如果是第一次使用那么肯定要设置时间的初始值以及对 RTC 进行相应的配置,而如果不 是第一次使用,那么我们就无需再设置时间的初始值以及对 RTC 进行相应的配 置,只需让RTC计数器继续计数就可以了。那么我们如何才能判断RTC是否为 第一次使用呢? STM32中有一个后备寄存器,寄存器中的值不会因为掉电而改 变,既然如此那我们肯定会这样想,当我第一次使用 RTC 时,往后备寄存器中 写入一个值,下次再使用 RTC 时,我只要判断后备寄存器中的值是否为我第一 次用RTC时写入的值,如果相等,说明我以前已经用

4、过RTC 了,现在我无需再 对RTC进行配置了,因为第一次都配置好了( RTC和后备寄存器一样,RTC寄 存器中设置的值不会因为掉电而改变),但要注意的是RTC的允许中断这一位在 每次复位后会回到默认值,所以每次复位后我们都要再次设置允许 RTC 中断。 下面我们就看看RTC的配置程序:函数名:RTC_Configurations :曲SEE- s : ifiaid RTCICOnfiguration(v2.d)RCCAPBlpeliphc一ockcmd(RCCAPBlperiphPWRAPBlperiphBKE ENABLE);PWRBackupAccesscmd(ENABLffBKPDel

5、nito; assssmssfi Busis WMMSXN nss RTC slRCCRTCCLKCOnfig(RCCRTCCLKSOUMeLS/* Enable RTC Clock */RCC_RTCCLKCmd(ENABLE);/*等待RTC寄存器与RTC的APB时钟同步*/RTC_WaitForSynchro();/*等待上次对RTC 寄存器配置完成 */RTC_WaitForLastTask();/* 使能 RTC 中断*/RTC_ITConfig(RTC_IT_SEC, ENABLE);/*等待上次对RTC寄存器配置完成*/RTC_WaitForLastTask();/*设置RTC的

6、预分频值,因为外部低速晶振是32768,所以选择 */* RTC 计数器计数频率= RTCCLK/RTC_PR = (32.768KHz)/(32767+1) */RTC_SetPrescaler(32767);/*等待上次对RTC 寄存器配置完成 */RTC_WaitForLastTask();下面再来看看在RTC中断中写了哪些程序:* 函数名: RTC_IRQHandler(void)*SEEvoid RTCIIRQHand_e(v2.d)if (RTCGeaTSsrtus(RTCJTSEC17RES3RTCc_eadTpendingBit(RTCJTSEC;、nmesspfiryiill

7、J秤la ajrijzw口榜TimeDispfiry HJf、Wait unti-srst write opedtion on RTCegisteN hasfinishedRTCIW.tFOLastTask90x00015180H23*3600+56*60+59M (RTCGetcounteo 0X00015180)RTCISetcoumer(oxo);7 Wait unti-srst write opeation on RTCegisteshas finishedRTCIWaitFOLaaTask9:RTCBiman3lifilFl逢番画sisHmmsBesz TimelRegu_ate(v

8、oidMHfflUint8lt USARTISCanf(uint32lt vace)Uint32ltindex Ho;Uint32lt tmpMl Hp0=wh=e (index A 2)whi(USARTGetF5rgstatus(USARTlUSARTFLAGRXN四 HH RESET0/ 汛册口 iHDasass博mAscnffitmpundex+H (USARTIReceiveData(USARTe); sssssm o si 9 2 画if (tmpundex 1J A 0X30) = (tmpundex 1J V 0X39)plintfnnrpase enter vSLid num

9、ber between 0 and 9 J;index 丄index H (tmpE I 0X30) + (tmpol I 0x30二 10);尊吻器曹 59 vSLueaM 23 熾 59 :細s庄:細void TimelAdjust(void)宀7 Wait unti二ast write operation on RTC registers has finished RTCIWaitForLaaTasko;RTCISetcountecnmelRegu5rteo)7 Wait unti-Qrst write operation on RTCegisteN hasfinishedRTC_WaitForLastTask();时间的初始值设置好之后肯定是让时间正常的走起来,同时在上位机 上显示时间* 函数名:Time_Show* 描述:在超级终端中显示当前时间值* 输入:无* 输出:无* 调用:主函数调用,调用函数 Time_Display(uint32_tTimeVar)*/ void Time_Show(void)printf(nr);while (1)/* 只有 TimeDisplay 为 1 时才在上位机上显示时间,TimeDisplay是用户自己定义的标示符在RTC中断

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号