如果你仔细研究USART_Init()函数,你会发现,这程序在配置波特率时会读取RCC有关的寄存器来计算当前CPU实际的工作频率是多少,然后计算参数来实现你需要的波特率——就是说不管你把单片机设置为什么样的工作频率,这函数都能让串口以你要求的波特率工作。
当然如果你把原来8M的晶振换掉了,那你就需要修改系统中的一个定义:在文件stm32f10x.h中的定义HSE_Value,这参数定义了单片机使用外部晶振或时钟源的频率,一般就是8000000,即使用的8MHz晶振。如果你的STM32用了什么7.3728、11.0592或者25MHz晶振时,你就要修改HSE_Value定义的值,这样保证串口通信波特率正确。
先关闭串口,修改好后开启;正在通信时不可以修改。用个函数,使用固件库
void USART_Config(uint32_t baud)
{
USART_InitTypeDef USART_InitStructure;
USART_Cmd(USART1, DISABLE);
USART_InitStructure.USART_BaudRate =baud
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
uint32_t baud_table[]={2400,4800,9600,115200,~~~~~~~};
定义个波特率表,根据外部触发或外中断 更改索引 用新的波特率值传给baud参数,调用这个函数
所谓串口的波特率自适应,如果你的键盘是发送固定格式的报文,那么需要进行波特率检测,就是把所有波特率全部试一遍,得到那个固定格式的报文的就是应该有的波特率。
按照这个思路去写程序,不然你做不到波特率自适应。当然也许你会想到更好的算法。
另外一个办法是让键盘发一个带有0和1的报文序列。这样通过判断脉冲宽度也可以得到波特率,不过这个办法复杂了点。
用keil进入程序编写界面,然后找到USART设置,进入后就能找到波特率设置了。望采纳
串口的布特吕在串口模式配置中设定,具体是USART_InitStructure.USART_BaudRate = x;这句。一般来说x的值即波特率都是用常数给定的。
想查询的话此处使用宏代替函数在其他处直接使用该宏即为所求。
想在程序运行中修改波特率其实我不太赞成,如果要改前后一定要加上足够时间延时。只需把x用全局变量替换,修改时修改变量值。切记!修改波特率值后需要重新运行串口模式配置初始化的函数才生效!
本文标签:stm32更改波特率程序