初级会员

- 积分
- 101
- 金钱
- 101
- 注册时间
- 2018-7-14
- 在线时间
- 19 小时
|
发表于 2020-7-24 15:11:30
|
显示全部楼层
今天也遇见了同样的问题,来论坛找答案,发现也有人和我的问题类似。
通过仿真看见 USART各个寄存器的值全为0.没有任何变化。
USART1->BRR=mantissa;
USART1->CR1=0x0000252c;//一个起始位,8个数据位,1个停止位,
USART1->CR1|=1<<6;//发送完成中断使能
USART1->CR2=0x00000000;//1个停止位
但是我吧正点原子的里程下载进去仿真发现USART各个寄存器的值可以修改。通过对比我发现
RCC->APB2RSTR|=1<<14;//串口1复位
RCC->APB2RSTR&=~(1<<14);//串口1结束复位
红色语句是不能省略的,加上上面这条红色的代码就可一乐。。。这里可能感到比较疑惑,因为在STM32参考手册中明确0无作用,所以很多人就觉得无作用就可以不用写。USART1RST: USART1复位 (USART1 reset)
由软件置’1’或清’0’
0:无作用;
1:复位USART1。 | 但你通过库函数版本意法半导体给的官方例程
void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
RCC->APB2RSTR |= RCC_APB2Periph;
}
else
{
RCC->APB2RSTR &= ~RCC_APB2Periph;
}
}
就是复位函数RCC_APB2PeriphResetCmd, DISABLE时需要执行该语句RCC->APB2RSTR &= ~RCC_APB2Periph;
|
|