OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2854|回复: 5

串口发送数据时 出现数据被改变的情况

[复制链接]

16

主题

28

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-7-13
在线时间
16 小时
发表于 2017-3-18 17:53:58 | 显示全部楼层 |阅读模式
11金钱
在用STM32F103 迷你板和战舰板 的串口发送数据时
无论采用串口一还是串口二
只要采用偶校验的方式
只要数据的高四位是0,就会被自动改成8

例如:想要发送0x01,串口调试助手接收到的数据就会变成0x81
试过不同的调试助手结果都会是这个样子


串口的中断函数里 只有一句USART_ClearITPendingBit(USARTx,USART_IT_RXNE);
主函数中内容为:
int main(){
    u16 t;  
    u16 len;   
    u16 times=0;
    uint16_t camd[17]={0xFC,0xFC,0xFC,0x03,0x08,0x08,0x08,0x8,0x4,0x50,0x00,0x00,0x22,0x22,0x22,0x74};
    u8 *p;
    delay_init();             //ÑÓʱº¯Êý³õʼ»¯      
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
    uart2_init(9600);     //´®¿Ú³õʼ»¯Îª115200
    uart_init(9600);
     while(1)
    {
        USART_SendData(USART2, 0xFF);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
           while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
        
            USART_SendData(USART1, 0xFF);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
           while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
      for(t=0;t<16;t++)
        {
                USART2->DR = (camd[t]& (uint16_t)0x01FF);
//这里曾经实验过USART_SendData(USARTx, camd[t]);问题同样会产生
           while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
        }
        delay_ms(5000);
   
    }     
    return 0;
}



由于底层系统的原因,校验方式只能选用偶校验

请问各位,产生这种现象的原因是什么?该如何解决?






最佳答案

查看完整内容[请看2#楼]

找到了可能的原因: 发送八位数据时,对于STM32来说,要采用9位数据模式,因为校验位也属于数据内容。 一会上机试一下,试过之后给大家答复
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

28

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-7-13
在线时间
16 小时
 楼主| 发表于 2017-3-18 17:53:59 | 显示全部楼层
找到了可能的原因:
发送八位数据时,对于STM32来说,要采用9位数据模式,因为校验位也属于数据内容。
一会上机试一下,试过之后给大家答复
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2017-3-18 18:18:20 | 显示全部楼层
USART1发送就Get USART1的TC标志,而不是USART2
回复

使用道具 举报

16

主题

28

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-7-13
在线时间
16 小时
 楼主| 发表于 2017-3-18 18:29:21 | 显示全部楼层
d1z1y2 发表于 2017-3-18 18:18
USART1发送就Get USART1的TC标志,而不是USART2

后来更改了TC 也是这种情况
回复

使用道具 举报

16

主题

28

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-7-13
在线时间
16 小时
 楼主| 发表于 2017-3-20 17:52:52 | 显示全部楼层
搞定 在发送八位数据时 如果采用奇偶校验 就需要把数据位的长度设置成9位
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2017-3-20 18:55:47 | 显示全部楼层
嗯嗯,记住了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-23 04:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表