×
单片机 > 单片机程序设计 > 详情

错误解决:STM32F103串口1与串口3相同代码却结果不同

发布时间:2020-06-05 发布时间:
|

在前几天调试openmv时发现同样的代码串口1和串口3的结果却是不一样的,当时着实是把我坑了很久,怎么都找不到原因,用示波器看波形也是没有问题的,在Openedv网站上有位网友指出是我初始化代码的问题,在翻阅参考手册后终于发现了问题。


       下列代码为我原本的初始化代码:

#include "sys.h"

#include "usart.h"

#include "led.h"

#include "usart3.h"

 

 

int theta_err,rho_err;

int main(void)

Stm32_Clock_Init(9);            //=====系统时钟设置

delay_init(72);                 //=====延时初始化

uart_init(72,115200);           //=====初始化串口1

uart3_init(72,115200);           //=====初始化串口3

LED_Init();

while(1)

{    

LED=!LED;

 

delay_ms(100);

}

    问题出在哪里呢,就是我对串口三的初始化。

    参考手册中的总线结构如下:

    可以看出,串口1挂载在APB2总线上,而串口2、3(4、5)都挂载在APB1总线上,而时钟树告诉我们:



    APB2总线是全速的(最高72MHZ),而APB1总线最高只支持36MHZ,这就是我的错误所在,将串口3设置为36MHZ后果然正常了。

 





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil(MDK-ARM)系列教程(七)_菜单