[应用相关] 出大问题了!

[复制链接]
1853|10
 楼主| yzzly 发表于 2014-2-19 08:24 | 显示全部楼层 |阅读模式
本帖最后由 yzzly 于 2014-2-19 08:25 编辑

昨天调试新的STM32F103系统,发现串口出现了波特率不对的问题。然后用老的工程直接(不重新编译)下载,结果波特率是正确的;如果把老工程重新编译后下载,串口波特率就不对了,目标波特率是9600,而实际只有7200。公司电脑上是这样,家里的电脑上也是这样,不知道怎么会出现这样莫名其妙的大问题,是编译器(MDK)到期了吗?有没有哪位朋友碰到过?
杨爱林林 发表于 2014-2-19 09:16 | 显示全部楼层
不麻烦的话 换成iar试试
dirtwillfly 发表于 2014-2-19 09:19 | 显示全部楼层
建议楼主把代码和开环环境的配置好好看看
baishuiyang 发表于 2014-2-19 09:25 | 显示全部楼层
分频设的不对吧
 楼主| yzzly 发表于 2014-2-19 09:40 | 显示全部楼层
本帖最后由 yzzly 于 2014-2-19 12:11 编辑

本人用STM32和MDK已经5年以上了,基本的东西还是知道的,产品也在不断的量产。
 楼主| yzzly 发表于 2014-2-19 12:14 | 显示全部楼层
MDK重装后,一个工程好了;其它工程还是不行!串口初始化都是一样的程序,用的是库函数语句后续工程都是拷贝的老工程。
        USART_InitStructure.USART_BaudRate = UART3_BaudRate;
        USART_InitStructure.USART_WordLength = (UART3_WordLen/9) << 12;
        USART_InitStructure.USART_Parity = UART3_PCE << 10;
        USART_InitStructure.USART_Parity |= UART3_PS << 9;
        USART_InitStructure.USART_StopBits = UART3_StopBit << 12;

        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_HardwareFlowControl |= UART3_RTSE<<8;
        USART_InitStructure.USART_HardwareFlowControl |= UART3_CTSE<<9;
        USART_InitStructure.USART_HardwareFlowControl |= UART3_CTSIE<<10;
        USART_InitStructure.USART_Mode = (UART3_RxEn<<2) | (UART3_TxEn<<3);

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);                                                        //使能USART3时钟
        USART_Init(USART3, &USART_InitStructure);
airwill 发表于 2014-2-19 21:27 | 显示全部楼层
是不是库版本不同了, 里面的定义不同了.
我查了一下以前的程序.

楼主的代码是: USART_InitStructure.USART_WordLength = (UART3_WordLen/9) << 12;
我的代码是:   USART_InitStructure.USART_WordLength = USART_WordLength_8b;

IJK 发表于 2014-2-20 09:34 | 显示全部楼层
其实,这个问题好查。就是调试时,对串口进行初始化后,看串口的波特率寄存器的值跟预期的是否相符。当然,调试时最好多看些相关的寄存器,比如PCLK的分频系数,虽然从症状来看相关性不大。
jlwg 发表于 2014-2-20 12:05 | 显示全部楼层
标题党,我还以为彗星撞地球了呐
拿起书本 发表于 2014-2-20 14:50 | 显示全部楼层
建议组织个代码测试项目,大家在各自的平台上跑跑看如何?!
shaobing1231 发表于 2014-2-20 15:01 | 显示全部楼层
建议楼主还是多多尝试一下 看看 发出来的波特率是多少。然后再做推测。
如果 倍频了,那就看看那里的设置不对,另外看看系统的systemclock那个变量 对不对。也许只是这个变量不对了。也可能变异的时候define的CLK 设置错了,比如,你用的是 12M的外部晶振,这就需要你在库文件里设置。总之能影响到的地方挺多的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

428

主题

1192

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部