当前位置: 首页 > news >正文

重庆网站深圳华强北电子市场

重庆网站,深圳华强北电子市场,企业营销策划书模板,服装网站建设的规模和类别STM32G474RE之RTC使用HAL库实现RTC时间配置#xff0c;以及报警配置#xff0c;支持双路报警。 1、STM32G474RE的RTC晶振引脚#xff1a; OSC32_IN为PC14#xff0c;OSC32_OUT为PC15#xff1b; 2、Vbat引脚 Vbat引脚是用来给外部晶振LSE和备份寄存器提供电源。当没有“…STM32G474RE之RTC使用HAL库实现RTC时间配置以及报警配置支持双路报警。 1、STM32G474RE的RTC晶振引脚 OSC32_IN为PC14OSC32_OUT为PC15 2、Vbat引脚 Vbat引脚是用来给外部晶振LSE和备份寄存器提供电源。当没有“外部电池”连接到Vbat引脚RTC会使用VDD供电。因此Vbat也可以不接“外部电池”。1.55VVbat3.6V 通过上图连接到Vbat的外部电池需要设计充电电路给它充电。 3、RTC_OUT映射 RTC报警输出RTC_OUT1和RTC_OUT2 RTC_OUT1为PC13RTC_OUT2为PB2 RTC_CR寄存器的bit22:21(OSEL[1:0]) OSEL[1:0]00b,输出不使能 OSEL[1:0]01bRTC报警器A输出使能 OSEL[1:0]10bRTC报警器B输出使能 OSEL[1:0]11bRTC唤醒输出使能 RTC_CR寄存器的bit31(OUT2EN) OUT2EN0,RTC_OUT2输出不使能 OUT2EN1,RTC_OUT2输出使能 RTC_CR寄存器的bit23(COE) COE0校准输出不使能 COE1校准输出使能 RTC_CR寄存器的bit19(COSEL) COE1且COSEL0,CALIB输出为512Hz COE1且COSEL1,CALIB输出为1Hz 4、测试程序 RTC.c程序 RTC_HandleTypeDef hrtc;void RTC_Init(void); void RTC_Display(void);void TEST_Hal_RTC_Set_Alarm_A(void); void TEST_Hal_RTC_Set_Alarm_B(void);void RTC_Init(void) {RCC_OscInitTypeDef RCC_OscInitStruct; //配置LSE/LSI时钟RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;//用来为RTC选择时钟源__HAL_RCC_PWR_CLK_ENABLE();//Enable write accessHAL_PWR_EnableBkUpAccess();//Enable the power clock#ifdef RTC_CLOCK_SOURCE_LSERCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;RCC_OscInitStruct.PLL.PLLState RCC_PLL_NONE;RCC_OscInitStruct.LSEState RCC_LSE_ON;RCC_OscInitStruct.LSIState RCC_LSI_OFF;HAL_RCC_OscConfig(RCC_OscInitStruct);//配置LSE时钟,关闭LSI时钟PeriphClkInitStruct.PeriphClockSelection RCC_PERIPHCLK_RTC;PeriphClkInitStruct.RTCClockSelection RCC_RTCCLKSOURCE_LSE;HAL_RCCEx_PeriphCLKConfig(PeriphClkInitStruct);//选择LSE时钟为RTC时钟源#elif defined (RTC_CLOCK_SOURCE_LSI)RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_LSI;RCC_OscInitStruct.PLL.PLLState RCC_PLL_NONE;RCC_OscInitStruct.LSIState RCC_LSI_ON;HAL_RCC_OscConfig(RCC_OscInitStruct);//配置LSI时钟PeriphClkInitStruct.PeriphClockSelection RCC_PERIPHCLK_RTC;PeriphClkInitStruct.RTCClockSelection RCC_RTCCLKSOURCE_LSI;HAL_RCCEx_PeriphCLKConfig(PeriphClkInitStruct);//选择LSI时钟为RTC时钟源 #endif /*RTC_CLOCK_SOURCE_LSE*/__HAL_RCC_RTCAPB_CLK_ENABLE();//使能RTC APB外部设备时钟,Enable RTC peripheral Clocks__HAL_RCC_RTC_ENABLE();//使能RTC时钟,Enable RTC Clockhrtc.Instance RTC; //选择RTChrtc.Init.HourFormat RTC_HOURFORMAT_24; //指定RTC小时的格式hrtc.Init.AsynchPrediv RTC_ASYNCH_PREDIV;//指定RTC异步预分法器的值。hrtc.Init.SynchPrediv RTC_SYNCH_PREDIV; //指定RTC同步预分配器的值。hrtc.Init.OutPut RTC_OUTPUT_DISABLE;hrtc.Init.OutPutRemap RTC_OUTPUT_REMAP_NONE;hrtc.Init.OutPutPolarity RTC_OUTPUT_POLARITY_HIGH;hrtc.Init.OutPutType RTC_OUTPUT_TYPE_OPENDRAIN;hrtc.Init.OutPutPullUp RTC_OUTPUT_PULLUP_NONE;HAL_RTC_Init(hrtc);if (HAL_RTCEx_BKUPRead(hrtc, RTC_BKP_DR0) ! 0x32F2){//读TAMP_BKPxR寄存器因为RTC_BKP_DR00所以是读TAMP_BKP0R寄存器Test_RTC_Set_Date_And_Time();//设置时间为24年2月29日星期四23:59:50:00HAL_RTCEx_BKUPWrite(hrtc, RTC_BKP_DR0, 0x32F2);//写TAMP_BKPxR寄存器因为RTC_BKP_DR00所以是写TAMP_BKPxR寄存器//将0x32F2写入TAMP_BKP0R寄存器//Writes a data in a RTC Backup data Register0}TEST_Hal_RTC_Set_Alarm_A();TEST_Hal_RTC_Set_Alarm_B(); }//函数功能:显示“年月日和星期几”以及“时分秒” void RTC_Display(void) {RTC_DateTypeDef sdatestructureget;//用来保存“年月日和星期几”RTC_TimeTypeDef stimestructureget;//用来保存“时分秒”printf(RTC_IT_SEC\r\n);HAL_RTC_GetTime(NULL, stimestructureget, RTC_FORMAT_BIN);//读取RTC时间//读RTC_TR寄存器bit21:20(HT[1:0]),HT[1:0]表示小时的十位数值//读RTC_TR寄存器bit19:16(HU[3:0]),HU[3:0]表示小时的个位数值//读RTC_TR寄存器bit14:12(MNT[2:0]),MNT[2:0]表示分钟的十位数值//读RTC_TR寄存器bit11:8(MNU[3:0]),MNU[3:0]表示分钟的个位数值//读RTC_TR寄存器bit6:4(ST[2:0]),ST[2:0]表示秒的十位数值//读RTC_TR寄存器bit3:0(SU[3:0]),SU[3:0]表示秒的个位数值//HAL库耍牛氓我也耍牛氓HAL_RTC_GetDate(NULL, sdatestructureget, RTC_FORMAT_BIN);//读取RTC日期//读RTC_DR寄存器bit23:20(YT[3:0]),YT[3:0]表示年的十位数值//读RTC_DR寄存器bit19:16(YU[3:0]),YU[3:0]表示年的个位数值//读RTC_DR寄存器bit15:13(WDU[2:0]),WDU[2:0]001b表示星期1;WDU[2:0]010b表示星期2......WDU[2:0]111b表示星期日//读RTC_DR寄存器bit12(MT),MT表示月的十位数值//读RTC_DR寄存器bit11:8(MU[3:0]),MU[3:0]表示月的个位数值//读RTC_DR寄存器bit5:4(DT[1:0]),DT[1:0]表示日的十位数值//读RTC_DR寄存器bit3:0(DU[3:0]),DU[3:0]表示日的个位数值//HAL库耍牛氓我也耍牛氓printf(%02d-%02d-%02d day:%02d , sdatestructureget.Year,sdatestructureget.Month,sdatestructureget.Date,sdatestructureget.WeekDay);printf(%02d:%02d:%02d\r\n, stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);//显示时间格式为 : YY-MM-DD hh:mm:ss }//设置时间为24年2月29日星期四23:59:50:00 void Test_RTC_Set_Date_And_Time(void) {RTC_TimeTypeDef sTime {0}; //用来设置时间“时分秒”RTC_DateTypeDef sDate {0}; //用来设置日期“年月日和星期几”sTime.Hours 0x23; //这里是BCD码0x23表示23小时sTime.Minutes 0x59; //这里是BCD码0x59表示59分钟sTime.Seconds 0x50; //这里是BCD码0x50表示50秒种sTime.SubSeconds 0x00;//RTC_SSR寄存器bit15:0(SS[15:0])是只读的,这里设置为0x00没有意义sTime.DayLightSaving RTC_DAYLIGHTSAVING_NONE;//RTC_CR寄存器bit16(ADD1H),ADD1H0,当前时间不增加1小时//若使用“夏令时”ADD1H1,表示当前时间增加1小时sTime.StoreOperation RTC_STOREOPERATION_RESET;//RTC_CR寄存器bit18(BKP),BKP0,不使用“夏令时”//现在已经废除了“夏令时”不要去了解。HAL_RTC_SetTime(hrtc, sTime, RTC_FORMAT_BCD);//设置“时分秒”sDate.WeekDay RTC_WEEKDAY_THURSDAY;//这里是BCD码RTC_WEEKDAY_THURSDAY表示0x04,星期四sDate.Date 0x29; //这里是BCD码0x29表示29日sDate.Month RTC_MONTH_FEBRUARY;//这里是BCD码RTC_MONTH_FEBRUARY表示0x02,2月sDate.Year 0x24; //这里是BCD码0x24表示24年HAL_RTC_SetDate(hrtc, sDate, RTC_FORMAT_BCD);//设置“年月日” }//使用HAL设置报警有点呆板 void TEST_Hal_RTC_Set_Alarm_A(void) {RTC_AlarmTypeDef sAlarm {0};//用来设置报警时间HAL_RTC_DeactivateAlarm(hrtc,RTC_ALARM_A);//选择RTC_ALARM_A时,表示停用AlarmA报警//不使能“Alarm A报警”和“Alarm A报警中断”,同时不选择“RTC报警事件”作为触发源//必须先停用AlarmA报警才能配置AlarmA报警时间sAlarm.Alarm RTC_ALARM_A; //指定配置RTC报警A寄存器(RTC_ALRMAR)sAlarm.AlarmTime.TimeFormat RTC_HOURFORMAT_24; //指定RTC报警小时的格式sAlarm.AlarmDateWeekDaySel RTC_ALARMDATEWEEKDAYSEL_DATE;//指定RTC警报是按照日期报警sAlarm.AlarmDateWeekDay 0x01;//每月1号报警// sAlarm.AlarmDateWeekDaySel RTC_ALARMDATEWEEKDAYSEL_WEEKDAY;//指定RTC警报是按照星期报警 // sAlarm.AlarmDateWeekDay RTC_WEEKDAY_FRIDAY;//每个星期五报警sAlarm.AlarmTime.Hours 0x00; //这里是BCD码0x00表示00小时sAlarm.AlarmTime.Minutes 0x00; //这里是BCD码0x00表示00分钟sAlarm.AlarmTime.Seconds 0x20; //这里是BCD码0x20表示20秒种sAlarm.AlarmTime.SubSeconds 0x30;//RTC_ALRMASSR寄存器bit27:24(MASKSS[3:0]),bit14:0(SS[14:0])//当选择“RTC_ALARM_A”时时间写入RTC_ALRMAR//当选择“RTC_ALARM_B”时时间写入RTC_ALRMBR// sAlarm.AlarmMask RTC_ALARMMASK_HOURS|RTC_ALARMMASK_MINUTES|RTC_ALARMMASK_DATEWEEKDAY;//RTC_ALARMMASK_HOURS|RTC_ALARMMASK_MINUTES|RTC_ALARMMASK_DATEWEEKDAY不关注日期小时和分钟则每分钟报警一次sAlarm.AlarmMask RTC_ALARMMASK_ALL;//RTC_ALARMMASK_ALL不关注日期小时分钟和秒则每秒种报警一次sAlarm.AlarmSubSecondMask RTC_ALARMSUBSECONDMASK_ALL;//需要匹配“子秒”HAL_RTC_SetAlarm_IT(hrtc, sAlarm, RTC_FORMAT_BCD);HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 5, 0);//设置NVIC中断分组44位抢占优先级0位响应优先级//选择中断优先级组4,即抢占优先级为4位,取值为0~15,响应优先级组为0位,取值为0HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn); }//使用HAL设置报警有点呆板 void TEST_Hal_RTC_Set_Alarm_B(void) {RTC_AlarmTypeDef sAlarm {0};//用来设置报警时间HAL_RTC_DeactivateAlarm(hrtc,RTC_ALARM_B);//选择RTC_ALARM_A时,表示停用AlarmB报警//不使能“Alarm B报警”和“Alarm B报警中断”,同时不选择“RTC报警事件”作为触发源//必须先停用AlarmB报警才能配置AlarmB报警时间sAlarm.Alarm RTC_ALARM_B; //指定配置RTC报警B寄存器(RTC_ALRMBR)sAlarm.AlarmTime.TimeFormat RTC_HOURFORMAT_24; //指定RTC报警小时的格式sAlarm.AlarmDateWeekDaySel RTC_ALARMDATEWEEKDAYSEL_DATE;//指定RTC警报是按照日期报警sAlarm.AlarmDateWeekDay 0x01;//每月1号报警// sAlarm.AlarmDateWeekDaySel RTC_ALARMDATEWEEKDAYSEL_WEEKDAY;//指定RTC警报是按照星期报警 // sAlarm.AlarmDateWeekDay RTC_WEEKDAY_FRIDAY;//每个星期五报警sAlarm.AlarmTime.Hours 0x00; //这里是BCD码0x00表示00小时sAlarm.AlarmTime.Minutes 0x00; //这里是BCD码0x00表示00分钟sAlarm.AlarmTime.Seconds 0x20; //这里是BCD码0x20表示20秒种sAlarm.AlarmTime.SubSeconds 0x30;//RTC_ALRMASSR寄存器bit27:24(MASKSS[3:0]),bit14:0(SS[14:0])//当选择“RTC_ALARM_A”时时间写入RTC_ALRMAR//当选择“RTC_ALARM_B”时时间写入RTC_ALRMBR// sAlarm.AlarmMask RTC_ALARMMASK_HOURS|RTC_ALARMMASK_MINUTES|RTC_ALARMMASK_DATEWEEKDAY;//RTC_ALARMMASK_HOURS|RTC_ALARMMASK_MINUTES|RTC_ALARMMASK_DATEWEEKDAY不关注日期小时和分钟则每分钟报警一次sAlarm.AlarmMask RTC_ALARMMASK_ALL;//RTC_ALARMMASK_ALL不关注日期小时分钟和秒则每秒种报警一次sAlarm.AlarmSubSecondMask RTC_ALARMSUBSECONDMASK_ALL;//需要匹配“子秒”HAL_RTC_SetAlarm_IT(hrtc, sAlarm, RTC_FORMAT_BCD);HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 5, 0);//设置NVIC中断分组44位抢占优先级0位响应优先级//选择中断优先级组4,即抢占优先级为4位,取值为0~15,响应优先级组为0位,取值为0HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn); }void RTC_Alarm_IRQHandler(void) { // HAL_RTC_AlarmIRQHandler(hrtc);uint32_t tmp READ_REG(RTC-MISR);//Get interrupt statusif ((tmp RTC_MISR_ALRAMF) ! 0U)//RTC ALARM A报警{//当选择“RTC_ALARM_A”时时间与RTC_ALRMAR相同时报警WRITE_REG(RTC-SCR, RTC_SCR_CALRAF);//Clear the AlarmA interrupt pending bit // __HAL_RTC_ALARM_EXTI_CLEAR_IT(); // LED1_On();//报警时,LED亮LED1_Toggle();}if ((tmp RTC_MISR_ALRBMF) ! 0U)//RTC ALARM A报警{//当选择“RTC_ALARM_B”时时间与RTC_ALRMBR相同时报警WRITE_REG(RTC-SCR, RTC_SCR_CALRBF);//Clear the AlarmB interrupt pending bit // __HAL_RTC_ALARM_EXTI_CLEAR_IT();LED2_Toggle();}__HAL_RTC_ALARM_EXTI_CLEAR_IT(); } RTC.h程序 #ifndef __RTC_H__ #define __RTC_H__#include stm32g4xx_hal.h //使能int8_tint16_tint32_tint64_t //使能uint8_tuint16_tuint32_tuint64_t//#define RTC_CLOCK_SOURCE_LSI //RTC使用CPU内部LSI作为时钟源 #define RTC_CLOCK_SOURCE_LSE#ifdef RTC_CLOCK_SOURCE_LSI #define RTC_ASYNCH_PREDIV 0x7C #define RTC_SYNCH_PREDIV 0xF9 #endif#ifdef RTC_CLOCK_SOURCE_LSE #define RTC_ASYNCH_PREDIV 0x7F #define RTC_SYNCH_PREDIV 0xFF #endifextern void RTC_Init(void); extern void RTC_Display(void);#endif /*__ RTC_H__ */ 5、测试结果 6、配置RTC_OUT引脚输出 //在调用HAL_RTC_Init()之前调用RTC_OUTx_Init() //RTC_OUTx_Init(hrtc,RTC_OUTPUT_ALARMA,1);//RTC报警器A从RTC_OUT1引脚输出 //RTC_OUTx_Init(hrtc,RTC_OUTPUT_ALARMB,1);//RTC报警器B从RTC_OUT1引脚输出 //RTC_OUTx_Init(hrtc,RTC_OUTPUT_ALARMA,2);//RTC报警器A从RTC_OUT2引脚输出 //RTC_OUTx_Init(hrtc,RTC_OUTPUT_ALARMB,2);//RTC报警器B从RTC_OUT2引脚输出 注意配置RTC_OUT1输出“RTC报警器A的报警标志”RTC_OUT1输出的电平时间和ALRAF的保持时间有关 配置RTC_OUT2输出“RTC报警器A的报警标志”RTC_OUT2输出的电平时间和ALRAF的保持时间有关 配置RTC_OUT1输出“RTC报警器B的报警标志”RTC_OUT1输出的电平时间和ALRBF的保持时间有关 配置RTC_OUT2输出“RTC报警器B的报警标志”RTC_OUT2输出的电平时间和ALRBF的保持时间有关 调用举例 中断函数添加一个延时否则示波器差会看不到波形 这里是为了演示RTC_OUT1和RTC_OUT2输出。
http://www.pierceye.com/news/710945/

相关文章:

  • 榆社网站建设销售新品牌如何推广
  • 网站制作的公司哪家比较好网页作图软件
  • 网站开发质保动态wordpress动态主题
  • 建公司网站设计网站公司百度后台登录
  • 响应式网站开发方法建设汽车行业网站
  • 51ppt模板免费下载网站浏览器下载大全免费下载
  • 阳西县建设局网站.net网站项目有哪些
  • 门户网站优化网站建立软件
  • 贵阳网站建设在哪里陕西省住房城乡建设部门户网站
  • 深圳网站建设799元起全包域名企业网站分为哪四类
  • 潍坊网站建设公司商城网站建设建站系统
  • 苏州区网站建设网站前台乱码
  • 网站设计公司企业邮箱青岛网站制作工具
  • 网站建设 html5wordpress 关注公众号
  • 自建公司网站利用网站文件下载做推广
  • 酒店网站素材软件开发合同范本大全
  • 安康市住房和城乡建设局网站网站建设广告宣传素材
  • 没有网站怎么做链接视频网上哪里给公司做网站
  • 广告网站制作报价网站开发环境怎么写
  • 网站开发总结与收获智慧团建登录官网
  • 旅游电子商务网站的建设建设局网站项目负责人资质要求
  • 设计响应式网站多少钱网站建设行业新闻动态
  • 一般做外单的有哪些网站太原市网站制作公司
  • wordpress 文章内seo代码优化工具
  • 做网站用的笔记本配置网络科技公司骗术
  • 在线建设网站江苏中南建设集团网站是多少
  • 中国建设银行官网站陕西西安网站建设域名怎么用
  • 佛山高端网站制作公司自己做的网站怎么发布到百度
  • 网站建设空间选择的重要性wordpress菲插件关键词
  • 基于wap的企业网站设计与实现洛阳霞光seo网络公司