本帖最后由 牛东 于 2017-1-15 13:10 编辑
stm32的一个下位机串口通讯项目,串口波特率9600,设置如下,一位接收,8个数据位,一位停止
void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);
mantissa=temp;
fraction=(temp-mantissa)*16;
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2;
RCC->APB2ENR|=1<<14;
GPIOA->CRH&=0XFFFFF00F;
GPIOA->CRH|=0X000008B0;
RCC->APB2RSTR|=1<<14;
RCC->APB2RSTR&=~(1<<14);
USART1->BRR=mantissa;
USART1->CR1|=0X200C;
USART1->CR2&=0Xcfff;
#if EN_USART1_RX
USART1->CR1|=1<<8;
USART1->CR1|=1<<5;
MY_NVIC_Init(1,3,USART1_IRQn,2);
#endif
}
主程序调用如下:
Stm32_Clock_Init(9); //72M
uart_init(72,9600); //9600
PCB上电后测得一个数据 F0 的波形如下
661626173844008942.jpg (81.59 KB, 下载次数: 0)
下载附件
9600波特率,每一位100US即一格,10位就是10格,可是以上的波形明显是11格还多,不解! ... ... ... ... .. ...
2017-1-15 12:59 上传
9600波特率,每一位100US即一格,10位就是10格,可是以上的波形明显是11格还多,不解! ...
你的眼睛很贼啊!!!
但是我测STC的单片机串口通讯的波形是对的哦!!9600波特率,数据也是F0
我说的只是示波器的问题
你这个情况最好找一个可以用的开发板例程来做对比,一点一点的换上你的代码,这样好排查一些。
如果换了开发板例程的代码还是不行,那你就要考虑硬件问题了
一周热门 更多>