
串口DMA + 空闲中断收发 ?
F103RCT6芯片对AFIO->MAPR寄存器写入时出错
使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准确的问题
WS2812B怎么显示任意字符 / 图案?
STM32F103RCT6 定位孔 镂空,会影响使用吗?
HAL库1.8.4在做破坏性测试的时候出现g_state永远为busy的情况导致串口通信发送卡死
L9663驱动开发
用rt_thread 环境编写,DAP-LINK 下载烧录,每一次空芯片下载之后就无法二次下载。求解
stm32cubemx F103芯片tim3 encoder模式pc6和pc7引脚,自动生成代码缺少gpio映射。
stm32的同一个定时器,不同的通道,可以不同时的输出pwm波形吗
如果用流行的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();也是合理的、保险的,保证该写操作顺利完成。
因为看不到你的代码,不知你后面还有些什么代码。