stm32f103rct6单片机串口波形不对求解!

2020-01-01 17:39发布

本帖最后由 牛东 于 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格还多,不解! ...
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
dog
1楼-- · 2020-01-01 19:28
你要先确定你的系统时钟是否正确
NJ8888
2楼-- · 2020-01-01 21:50
示波器检定过期了,不准
牛东
3楼-- · 2020-01-02 01:45
 精彩回答 2  元偷偷看……
dog
4楼-- · 2020-01-02 04:13
牛东 发表于 2017-1-16 11:22
用两台示波器测过,8M!!

你的外部是8M可以量得到,那你的内部PLL,SYSCLK,PCLK设置呢?
不搞清楚这些是不行的,
我猜你是个小白。
avr_sz
5楼-- · 2020-01-02 07:18
不是每种波特率都能 100%对得上,都有个误差,你可以尝试其它波特率是不是更准一些

另外现在的9600能通信上吗?
牛东
6楼-- · 2020-01-02 12:51
avr_sz 发表于 2017-1-16 14:49
不是每种波特率都能 100%对得上,都有个误差,你可以尝试其它波特率是不是更准一些

另外现在的9600能通信 ...

57600波特率串口下载程序没有问题,串口通讯向上发送数据没有问题,但发送和接收同时打开,串口助手会收到错误数据!(程序有CRC8校验)

一周热门 更多>