• stm8L 串口收发数据错误问题


    一,项目描述

            STM8L051接收上位机下发的数据命令,做相应的数据上传;

    二,遇到的问题

            串口收发数据错误,比如用SSCOM发送个01,直接原数返回,SSCOM显示FF, 发送什么数据都错误。

    三,解决问题的过程

            电工搞了这么多年的单片机,意法半导体的系列单片机,可以说是翻了个底朝天,熟悉的不能再熟悉了,竟然出了这个幺蛾子,那就一一排查吧。

            首先我用的STM8L+CH340N,第一步,怀疑CH340N电路是不是有问题,因为我用的USB5V供电,直接和3.3V供电的STM8L通讯(以前也这么搞过,没啥问题),我把CH340N改成3.3V供电,再测试,还是有问题。说明这块没问题,排除掉。

            接着看代码,把其他所以非相关的代码全部注释掉,只保留串口初始化代码,中断函数也只接收到转发上去。波特率,停止位,校验位等没问题。排除掉。

            然后就怎么想也想不通了,,,一根烟,,,,,,两根烟,,,,,,三根烟,,,,,,关电脑,,,,,,

            百思不得其解,收人家的钱,活还得给人家干,重复上述的操作,一行一行代码,一个一个硬件电路的检查,都没问题,乍一看代码,都没问题,代码如下:

    1. void USART_Config( void )
    2. {
    3. CLK_PeripheralClockConfig( CLK_Peripheral_USART1, ENABLE ); //使能USART1时钟
    4. USART_Init( USART1, //设置USART1
    5. 9600, //波特率设置
    6. USART_WordLength_8b, //数据长度设为8
    7. USART_StopBits_1, //1位停止位
    8. USART_Parity_No, //无校验
    9. ( USART_Mode_Rx | USART_Mode_Tx ) ); //设置为发送接收双模式
    10. USART_ITConfig( USART1, USART_IT_RXNE, ENABLE ); //使能接收中断
    11. USART_Cmd( USART1, ENABLE ); //使能USART1开始工作
    12. CLK_SYSCLKDivConfig( CLK_SYSCLKDiv_2 ); //内部时钟为1分频 = 16Mhz 为系统时钟
    13. }

     

     

    诡异的问题,需要诡异的灵感来去解决,我下意识的把最后一句话,挪到第一句的上面,问题解决了,代码如下:

    1. void USART_Config( void )
    2. {
    3. CLK_SYSCLKDivConfig( CLK_SYSCLKDiv_2 ); //内部时钟为1分频 = 16Mhz 为系统时钟
    4. CLK_PeripheralClockConfig( CLK_Peripheral_USART1, ENABLE ); //使能USART1时钟
    5. USART_Init( USART1, //设置USART1
    6. 9600, //波特率设置
    7. USART_WordLength_8b, //数据长度设为8
    8. USART_StopBits_1, //1位停止位
    9. USART_Parity_No, //无校验
    10. ( USART_Mode_Rx | USART_Mode_Tx ) ); //设置为发送接收双模式
    11. USART_ITConfig( USART1, USART_IT_RXNE, ENABLE ); //使能接收中断
    12. USART_Cmd( USART1, ENABLE ); //使能USART1开始工作
    13. }

     

     

    就是这个地方的不同,造成的数据不正确。

    使能串口时钟前,要先使能系统时钟,这样,串口时钟才会正确的匹配!

    记录下来,以便遇到同样问题的电友互相交流。

    四,总结:

    电工干了10多年的电子开发,撸代码,画电路,画板子。

    框架搭好之后,写代码像是不用脑袋一样,意识流的写。

    这就应验的一句话,往往在你最熟悉,最不起眼的地方栽跟头,还不知道怎么载的。

    一定要对自己画的每个电阻,每根线,每个芯片负责。

    一定要对自己敲的每行代码负责。

  • 相关阅读:
    网络攻防中黑客常用技术跨站脚本技术:持久型(存储)XSS 技术详解,目标设置、模糊测试框架、模糊测试模板、挖掘富文本存储型 XSS
    零基础学python之集合
    数据结构之栈
    C#控制台连接Mysql数据库,有配置数据库连接字符串的配置文件
    Linux内存管理 (2):memblock 子系统的建立
    旋转矩阵-数学理论
    java判断空的方法
    计算机毕业设计jsp家校互动系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
    亚马逊国际获得AMAZON商品详情 API
    Vue项目搭建基础流程
  • 原文地址:https://blog.csdn.net/xuechengchang/article/details/126723615