STM32硬件IIC
STM32 CAN通讯收发异常
STM32IDE工程内如何访问、计算得到当前程序flash已经使用的情况?
数据丢失
STM32F107RBT6 页擦除函数返回值成功但目标扇区数据并未擦除
L6235Q驱动MAXON三相无刷直流电机,FWD引脚接入PWM波,占空比50%的时候电机不转动,其他占空比电机转动,数据手册并没提及,请问有什么依据吗?
板子肯定没问题,用cubeprogrammer烧录报错
STM32F103ZET6 CS信号无法拉高
在FreeRTOS中串口重定向使用HAL库函数中断出现异常
STM32F103C8T6 有没有过UL认证?
如果用流行的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();也是合理的、保险的,保证该写操作顺利完成。
因为看不到你的代码,不知你后面还有些什么代码。