STM32 USART出现乱码
来源:互联网 发布:mst软件与sap2000 编辑:程序博客网 时间:2024/05/16 07:55
USART使用串口助手调试时出现乱码的情况,一般都是波特率的问题,例如:向串口发送“hello world\r\n”,但是串口助手收到的数据却是这样:
于是我仔细检查代码中设置的波特率的大小,发现没错,也是设置为115200,但是串口助手上显示的还是乱码。我再仔细检查与USART相关的代码,包括UASRT初始化、中断、以及发送数据的类型。。。,很绝望,还是没有找出这个BUG!
以下是我的UASRT相关设置代码:
void Uart1_Init(void){ //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //使能USART1时钟 //USART1对应引脚的复用 GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //USART1端口配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA,&GPIO_InitStructure); //USART1 初始化 USART_InitStructure.USART_BaudRate = 115200; 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); //使能USART1 //开中断 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }void USART1_IRQHandler(void){ uint16_t Usart_Data; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART1,USART_IT_RXNE); Usart_Data = USART_ReceiveData(USART1); USART_SendData(USART1, Usart_Data); }}
main函数
int main(void){ int i, len; char buffer[20] = {"hello world\r\n"}; len = strlen(buffer); NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2); Systick_Init(); Uart1_Init(); while(1) { for(i=0; i<len; i++) { USART_SendData(USART1, (uint16_t)buffer[i]); while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET); } delay_s(1); }}
。。。找了半天终于把问题找出来了,原来还是波特率的问题。虽然设置USART1时的波特率没错,但是系统的HSE_VALUE
(高速外部时钟的值)与开发板实际的值不符,导致开发板串口的波特率与串口助手设置的不一致,这就是出现乱码的原因!USART1是挂载在AHB1,所以HSE_VALUE
对UASRT1的波特率有影响。本人使用开发板的HSE为8MHz,而工程中默认为25MHz,故把它改过来即可。
打开工程里面的stm32f4xx.h
文件,找到下图位置:
把其中的HSE_VALUE改为开发板实际的值即可
修改好重新编译下载到开发板中运行,此时串口助手能正常显示接收的数据。
希望对你有所帮助!
阅读全文
1 0
- STM32 USART出现乱码
- STM32 USART
- STM32 USART
- STM32-USART
- STM32 -USART中断方式
- STM32之USART(one)
- STM32之USART
- STM32之USART
- STM32之USART学习
- STM32 DMA USART ADC
- STM32 USART的使用
- STM32 -USART中断方式
- STM32之USART学习
- STM32 USART 一些问题
- STM32 USART DMA
- stm32 USART 学习笔记!
- STM32之USART配置
- stm32之USART
- oracle之 安装 11G RAC 报 NTP failed
- 作业整理
- 20170927_合并两个已排序的单链表
- 基本运算符总结
- 有盟第三方分享消息类型,登陆用户信息获取
- STM32 USART出现乱码
- python处理excel表格的一些基本操作(1)
- js 强制事件触发
- 解决Android.content.res.Resources$NotFoundException: File res/layout/...异常
- 记一次淘宝首页奇葩的渲染问题-渲染色块
- 1.套接字编程基础
- [译]Golang中JSON和结构体的组合使用
- 文章标题
- 【知了堂学习笔记】正则表达式