各位大侠前辈,我刚刚开始学stm32,在做串口发送数据实验时出现了很奇怪的现象:
一.程序在开发板中执行时:
1).直接开发板运行,向串口发送ABCDEFGHIJKLMNOPQRST,但是串口助手显示的是BCDEFGHIJKLMNOPQRST,丢掉了第一个'A';
2).使用Jlink全速运行时,串口调试助手显示的是BCDEFGHIJKLMNOPQRST,丢掉了第一个'A',和上面一样的现象;
3).使用Jlink单步调试时,串口调试助手显示的是ABCDEFGHIJKLMNOPQRST,没有丢失数据
二.直接使用keil4仿真器时,USART1仿真的结果实ACDEFGHIJKLMNOPQRST,丢失了'B'
真是搞不明白,希望前辈们指点指点,代码如下:
int main(void)
{
float DIV;
u16 M,F,BRR;
u16 Baud;
int i;
u8 data;
RCC_Configuration();
GPIO_Configuration();
/*CR1中UE位使能,M位定义字长,TE发送使能,CR2中选择停止位 */
USART1->CR1 |=(1<<13);
USART1->CR1 &= ~(1<<12);
USART1->CR2 &=~((1<<12)|(1<<13));
USART1->CR1 |=(1<<3);
/*设置波特率*/
Baud=9600;
DIV=(float)(72*1000*1000)/(Baud*16);
M=DIV;
F=(DIV-M)*16;
BRR=(M<<4)+F;
USART1->BRR=BRR;
/*发送数据 向寄存器DR写入数据ABCDEFGHIJKLMNOPQRST
*/
data='A';
for(i=0;i<20;i++)
{
USART1->DR=data;
data++;
while((USART1->SR &0x40)==0) ; //判断是否发送完成
}
}
|