原来学习stm32,关于串口波特率这个问题没有怎么关注,一般也就习惯用9600或者115200,今天被问到:stm32支持的最大波特率为多少?我自己也语塞了...
为此我好好看了下相关资料。
首先查看了stm32f10x参考手册.pdf,其中关于USART部分提到了USART的最高传输速度为4.5Mbit/s,图片(图1)如下:
在找到了最大的传输速度后,就要考虑为什么会得到这个速度,于是我查看了stm32f10x固件函数库.pdf,在这个文件中关于USART库函数的讲解中发现了关于波特率计算的公式。如下图(图2)所示:
这个里面提到了两个整数分频器和小数分频器这两个东西,并且波特率的计算就和这两个值有关。那么回到上面的问题,最高传输速度4.5Mbits/s是怎么得到的呢?根据公式可以看出波特率和APB总线时钟频率有关,那么需要查看APB时钟的相关信息,这个就需要查看stm32的时钟树了,我查看了
先进的基于ARM内核的32位微控制器STM32E_En.pdf 其中的时钟树如下图(图3):
首先要知道的是USART1的时钟是挂载在APB2上面的,由图可以知道APB2时钟的最高频率为72Mhz。
现在我们来推导4.5Mbit/s的最高速度是怎么计算得到的:
根据图2中的第一个公式,我们得出:
IntegerDivider = (72000000 / (16 * 4500000)) = 1
根据图2的第二个公式,我们得出:
FractionalDivider = ((1.0 - (u32)1) * 16) + 0.5 = 0.5
那么当我们将串口的波特率设置为4.5Mbit/s时,程序通过分别写入整数分频器(IntegerDivider )以及小数分频器(FractionalDivider ),这样串口的波特率就成为了4.5Mbit/s。
我们可以再举个例子:
以我们常用的9600bit/s来举例
IntegerDivider = (72000000 / (16 * 9600)) = 468
FractionalDivider = ((468.75 - (u32)468) * 16) + 0.5 = 12.5
对于串口调试助手中常用的最高波特率为256000bit/s来说,stm32单片机是完全可以支持的。
最后回到让我语塞的那个问题:stm32支持的最大波特率为多少?
答:stm32支持的最大波特率为4500000bit/s,只要比这个值小的都是ok的~~
关键字:stm32 波特率
引用地址:
stm32支持的波特率的问题
推荐阅读最新更新时间:2024-11-13 23:13
STM32学习笔记4:外部中断
NVIC: STM32F40xx/STM32F41xx的92个中断里面,包括10个内核中断和82个可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这82个可屏蔽中断。 那么我们如何管理82个外部中断呢? 首先,对STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。分组配置在SCB- AIRCR寄存器,如下表: 抢占优先级 & 响应优先级区别1.高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。 2.抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。 3.抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。 4.如果两个中断的
[单片机]
集性能、紧凑、灵活、能效于一身,ST8引脚STM32微控制器问市
意法半导体8引脚STM32微控制器(MCU)现已上市,紧凑、经济的封装让简单的嵌入式开发项目也能利用32位MCU的性能和灵活性。 新推出的四款STM32G0 微控制器是8引脚经济性和32位性能的完美组合,在市场绝无仅有,基于59 DMIPS的 64MHzArm®Cortex®-M0 + CPU,片上高达8KB的RAM和32KB闪存,高性能外设包括2.5Msps ADC、高分辨率定时器和高速SPI接口。灵活的I/O引脚映射和MCU内部功能,让设计人员轻松升级终端产品功能,不会牺牲电路板空间或物料清单成本。高稳定内部振荡器,在宽温度和宽压范围内精度达到±1%,为开发者节省了外部时钟元件。 电池容量极限、生态设计规则或电器
[单片机]
STM32固件库SYSTEM 文件夹介绍
SYSTEM 文件夹里面的代码,此文件夹里面的代码由 ALIENTEK 提供,包含了几乎每个实验都可能用到的延时函数,位带操作,串口打印代码等。SYSTEM 文件夹下包含了 delay、 sys、 usart 等三个文件夹。分别包含了 delay.c、 sys.c、usart.c 及其头文件 delay.h,sys.h,usart.h。 delay 文件夹代码介绍 delay 文件夹内包含了 delay.c 和 delay.h 两个文件,这两个文件用来实现系统的延时功能,其中包含 3 个函数: void delay_init(u8 SYSCLK); //该函数用来初始化 2 个重要参数:fac_us 以及 fac_ms;同时把
[单片机]
STM32的ADC转换最常见的方式
这里的ADC转换也来使用DMA---这个也是STM32的ADC转换最常见的方式。 第一步是了解STM32的ADC对应的GPIO口如下图不用记住,可以查询,我是将它剪下来粘贴到书本的相应章节! 第二步是配置相应ADC转换的GPIO口这里使用PC0--PC1 static void ADC1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //打开DMA1的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 “ RCC_A
[单片机]
STM32和ARM的区别
这个问题大概2009年的时候很多人就在问,请看09年的时候大家给出的若干比喻: http://www.amobbs.com/forum.php?mod=viewthread&tid=3784815&highlight 以后的ARM初学者也都在问。 笔者也是菜鸟,到网上搜了搜。下面先看一张图: 这张图是我在意大利与法国合资的意法半导体公司(ST,世界几大半导体公司之一)的官网上看到的。这说明,STM32是意法半导体公司的产品。 意法半导体(ST)后面为什么要加上M32呢? 这是由于该产品使用的是ARM公司的32-bit ARM Cortex MCUs,我想这就是STM32名字的由来(个人观点哈,反正也是菜鸟笔记)。 想起
[单片机]
stm32ucosiii 笔记03
任务切换: 1、将被挂起的任务寄存器入栈 2、将较高的优先级任务的寄存器出栈 任务的任务切换 0S_TASK_SW( ) 1、通过系统调用指令完成 2、保护当前任务现场 3、恢复新任务现场 4、执行中断返回指令 内存管理: 在ANSI C中使用 malloc()和free() 函数动态的分配内存和释放内存 ucos中,操作系统把连续的大块内存按分区来管理。每个分区中包含有整数个大小相同的内存块 内存控制块 memory control blocks 数据结构跟踪每一个内存分区,系统中的每一个内存分区都有他自己的内存控制块 内存管理初始化 OS_CFG.H—— OSMem
[单片机]
STM32入门学习笔记之EEPROM存储实验1
16.1 EEPROM概述 EEPROM(Electrically Erasable Programmable read only memory),称为带电可擦除可编程只读存储器,是一种可以断电保存数据的存储芯片,EEPROM可以在电脑上或专用设备上擦除已有信息,重新编程,一般用在即插即用设备中。 这种存储芯片可以通过高于普通电压的作用来擦除或重写,EEPROM芯片一般用在需要频繁存储数据,但是数据量不大的场合,本实验以Atmel公司设计的AT24C02为例,来详细描述EEPROM的基本操作。 AT24C02是一片存储容量在2Kbit的的存储芯片,即存储容量512Byte,通过IIC总线协议进行数据通信,STM32F1内置的I
[单片机]
UCGUI在STM32平台移植经验(无操作系统)
ucgui 移植的前提是已经具备了LCD驱动函数,已经能够实现点亮LCD屏幕,并实现画点以及获取指定点颜色值的功能。一般的显示屏供应商会提供对应的驱动函数。主要有初始化函数void LCD_Init(),屏幕画点函数 Void LCD_DrawPoint(u16 x,u16 y,u16 color),以及获取指定点颜色值的U16 LCD_ReadPoint(u16 x,u16 y)函数。移植的关键在于把这三个函数与ucgui提供的接口函数匹配。 打开GUILCDDriver中的LCDDummy.c文件,找到int LCD_L0_Init(void)初始化函数,LCD_L0_SetPixelIndex(int x, int y,
[单片机]