
STM32会存在单个IO口坏掉的情况吗?
STM32F103RET6 FLASH擦除失败问题
6.28周六签到打卡
foc2.0函数SVPWM_3ShuntCalcDutyCycles看不明白
请问有stm32f103驱动无刷电机的学习资料吗,找了很久都没有找到
stm32编码器模式计数问题
关于ASM330LHH TR调试中的问题
STM32的DCode bus是连接到bus matrix的吗?参考手册描述和图片是不符吗?
stm32ide怎么正确的导出项目
STM32F105RBT6 2025年 ROSH REACH 报告
如果用流行的CUBE库,那么从应用层看就会简单的多。这个库里面有例程可以参考。
STM32Cube_FW_F1_V1.8.0\Projects\STM32F103RB-Nucleo\Examples\RTC
在使用本函数前必须先调用函数 RTC_WaitForLastTask(),等待标志位RTOFF 被设置
这个我试了一下,发现手册写错了,
手册是这样的
例:
/* Wait until last write operation on RTC registers is terminated */
RTC_WaitForLastTask();
/* Sets Alarm value to 0xFFFFFFFA */
RTC_SetAlarm(0xFFFFFFFA);
但实际上应该是这样的
/* Sets Alarm value to 0xFFFFFFFA */
RTC_SetAlarm(0xFFFFFFFA);
/* Wait until last write operation on RTC registers is terminated */
RTC_WaitForLastTask();
调换一下就好了,这是为啥,很奇怪
其中,计数值修改为这个RTC_GetCounter()
刚才最后的针对RTC寄存器的写操作完成了。换言之,开启新的RTC写操作时要保证没有前次没完成的
写操作。
反正你保证每次做RTC寄存器写操作前保证该位置1才可以。这是关键点。
下面F1标准库例程的部分代码:
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask(); ///START
/* Enable the RTC Second */
RTC_ITConfig(RTC_IT_SEC, ENABLE);
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
/* Set RTC prescaler: set RTC period to 1sec */
RTC_SetPrescaler(32767);/* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask(); //END
你现在觉得这样写没有问题:
/* Sets Alarm value to 0xFFFFFFFA */RTC_SetAlarm(0xFFFFFFFA);/* Wait until last write operation on RTC registers is terminated */
RTC_WaitForLastTask();
你写前没有查RTCOFF标志,有可能你写时该位置1了,即没有未完成的RTC写操作。
然后再调用RTC_WaitForLastTask();也是合理的、保险的,保证该写操作顺利完成。
因为看不到你的代码,不知你后面还有些什么代码。