USART1初始化遇到问题

gili   2009-5-9 11:06 楼主
初始化步骤如下:
1:  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
2:USART_DeInit(USART1);
3:USART_Init(USART1, &USART_InitStructure);
4:USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
5:USART_Cmd(USART1, ENABLE);
当运行后我查看USART1的寄存器,全是0,看USART2的寄存器却被改变了,这是为什么?

回复评论 (8)

什么芯片?什么调试软件?

                                 什么电路板?
点赞  2009-5-9 11:07

芯片类型

                                 STM32发03VBT6芯片
点赞  2009-5-9 13:53

什么调试软件?什么电路板?

                                 关键问题是什么调试软件?你是如何看到的?
点赞  2009-5-9 16:06

调试软件

                                 我用的是IAR,ST LINK-II通过JTAG调试,很奇怪,我设置的是USART1,可代码运行后看到USART1的所有寄存器都是O,USART2的寄存器变化了,我在RCC中也配置了USART1和GPIOA的时钟,我看了相关寄存器RCC_APB2ENR为0x21,也就是高速外设配置了GPIOD和AFIO的时钟,我怀疑是不是下的刚编译的代码到芯片内部了,库文件是不容易错的,我检查了系统HSE是8M,然后用RCC_MCOConfig(RCC_MCO_SYSCLK);来配置MCO,看看系统时钟是不是起来,从新运行,MCO位是0,未被改变,也就是未写该寄存器,我晕,就直接用*(vu8 *) 0x40021007 = 0x4;写寄存器,还写不进去。失败,我写一个地址都不行,
点赞  2009-5-9 16:33

另外

                                 我就想单步试试,奇怪,不能单步,单步不到RCC配置函数里面,没办法了,是不是硬件的问题
点赞  2009-5-9 16:49

一个被容易忽略的问题

                                 管教有没有初始化
点赞  2009-5-10 20:46

问题解决

问题解决,原因,Project->Debugger->Download中未选择Use flash loader
但出现另一个问题,USART1中断到了后程序跑到中断处理程序入口,检查到RXNE位是0,所以不能接收到来的数据虽然数据来了。
点赞  2009-5-11 15:39

设置中断优先级了吗?

                                 我这里有一个刚调好的例子代码,需要的话发给你?
点赞  2009-5-12 14:01
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复