初始化步骤如下:
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的寄存器却被改变了,这是为什么?
什么调试软件?什么电路板?
关键问题是什么调试软件?你是如何看到的?
调试软件
我用的是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;写寄存器,还写不进去。失败,我写一个地址都不行,
另外
我就想单步试试,奇怪,不能单步,单步不到RCC配置函数里面,没办法了,是不是硬件的问题
问题解决
问题解决,原因,Project->Debugger->Download中未选择Use flash loader
但出现另一个问题,USART1中断到了后程序跑到中断处理程序入口,检查到RXNE位是0,所以不能接收到来的数据虽然数据来了。
设置中断优先级了吗?
我这里有一个刚调好的例子代码,需要的话发给你?