求助:STM32使用USART设置停止位为1,示波器实际测量是2位

2019-12-25 18:47发布

STM32使用USART初始化设置停止位为1,示波器实际测量是2位,是什么原因呢?请高手帮忙看看
初始化部分代码:
        USART_InitStructure.USART_BaudRate = bound;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;       

       USART_Init(USART1, &USART_InitStructure);
       USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
       USART_Cmd(USART1, ENABLE);

串口发送数据部分代码:
        for(i=0;i<DataLen;i++)
        {
            USART_SendData(USART1, DMX_buf[i]);
            while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
        }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
honeybear
1楼-- · 2019-12-26 19:22
串口发送数据部分代码改为直接操作寄存器,实际测量间隔还是两个停止位,
USART1->DR=DMX_buf[0];
while((USART1->SR&0X40)==0);
USART1->DR=DMX_buf[1];
while((USART1->SR&0X40)==0);
把停止位改为0.5位,实际测量为1.5位;真奇怪那增加的以为停止位那里来的,跟波特率也没有关系
upli
2楼-- · 2019-12-27 00:17
程序执行时发送两个字节之间的延时,把停止位拉长了。停止位和空闲状态一样,都是高有效,你分辩不出来
zchong
3楼-- · 2019-12-27 04:42
 精彩回答 2  元偷偷看……
1a2b3c
4楼-- · 2019-12-27 09:15
换dma一下就知道怎么回事了
honeybear
5楼-- · 2019-12-27 11:32
zchong 发表于 2017-8-22 07:57
不要判TC,判另外一个发送寄存器空标志看看

非常感谢大神,使用TXE:发送数据寄存器空 (Transmit data register empty) ,来判断就正常了
zwb917
6楼-- · 2019-12-27 16:24
很多情况都没有  留意停止位  这个关系很大么?

一周热门 更多>