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

在调试openmv时发现相同代码在串口1和串口3上运行结果不同,通过检查发现原因是串口3挂载于APB1总线,其最高频率为36MHz,而非APB2总线的72MHz。调整串口3的频率设置后,问题得以解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在前几天调试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后果然正常了。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值