【串口乱码】问题汇总——定时器通过冲突

2019-07-21 02:35发布

本帖最后由 好整以暇 于 2019-4-21 15:12 编辑

调试项目的时候串口正常打印,单刚启动一个PWM的时候,串口乱码了,开始百度,搜到的结果都是更改文件编码格式,然鹅并不能解决我的问题,于是又回到STM32的官方手册(有问题看手册,真的有用),然后就发现问题了。
主函数如下,初始化了串口一和TIM1 的pwm的Channel1和 Channel2

[mw_shl_code=c,true]int main(void)
{        char i;
        delay_init();                                                                        //延时函数初始化
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 设置中断优先级分组2
        uart_init(9600);                                                                //串口初始化为9600
        TIM1_PWM_Init(899, 0); //不分频。PWM频率=72000/(899+1)=80Khz

        while (1)
        {
                i++;
                printf("正常打印过程 ");
                if(i>=3)
                {
                        assert_param(IS_TIM_LIST6_PERIPH(TIM1));
                        TIM1->CCR2 = 1000; //舵机动作,之后加入延时
                        i=0;
                }
        }        
        delay_ms(2000);
        delay_ms(2000);
}[/mw_shl_code]

运行后串口打印结果如图1。

查看了手册之后发现
PB14 与PA9 都是定时器1 的 Channel2,如图2。

总结一下串口乱码的几种情况,小伙伴如果遇到乱码,对照这几个问题,排查试试。
  • 检查波特率是否一致,校验位,停止位是否一致。
  • 传输线是否过长,波特率较高的情况下传输线过长也可能导致乱码。
  • 检查系统时钟与板子上的晶振是否一致。
  • 更换上位机试试。
  • 检查文件格式,右键使用记事本打开输出代码所在的.C,另存为,如图3,选择ANIS。
  • 检查一下串口输出所在的定时器通道有没有跟其他用到的外设冲突。

有问题查手册,手册能帮我解决很多问题,养成仔细读手册的好习惯。


0条回答

一周热门 更多>