在前几天调试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后果然正常了。
推荐阅读
- stm32|基于STM32和freeRTOS智能门锁设计方案
- 日常分享|共享充电宝方案原理,具体部件组成以及主控MUC参数
- #|ARM裸机开发(汇编LED灯实验(I.MX6UL芯片))
- STM32|STM32的四种IO输出模式
- STM32 远程升级(ISP / IAP)
- stm32|stm32f103can总线过滤器配置
- STM32CubeMX配置SDIO模式(非DMA方式)
- STM32|如何建一个STM32F030标准库工程模板
- STM32 时钟RCC相关配置参考stm32f10x_rcc.h
- STM32 NVIC