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 { 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改为开发板实际的值即可 修改好重新编译下载到开发板中运行,此时串口助手能正常显示接收的数据。
上一篇:关于STM32F107RCT6使用8M晶振串口波特率错误的问题
下一篇:STM32库文件systemInit 晶振更改默认晶振8M到12M方法
推荐阅读
史海拾趣
GAIA盖亚电源深知质量是企业生存和发展的基石,因此一直将质量管理放在首位。公司通过了ISO9001 V2008等国际质量管理体系认证,并建立了完善的质量管理体系。在生产过程中,GAIA盖亚电源采用高标准流程和自动化制造能力,确保每一个产品都符合严格的质量标准。此外,公司还定期对产品进行严格的测试和验证,以确保其在实际应用中的可靠性和稳定性。
EPCOS的前身是西门子松下有限公司(Siemens Matsushita Components),于1989年在德国慕尼黑成立。这家合资公司的诞生标志着西门子和松下两大电子巨头在电子元器件领域的强强联合。通过整合双方的技术和市场优势,EPCOS迅速崛起为全球电子元器件市场的重要参与者。
EPCOS的前身是西门子松下有限公司(Siemens Matsushita Components),于1989年在德国慕尼黑成立。这家合资公司的诞生标志着西门子和松下两大电子巨头在电子元器件领域的强强联合。通过整合双方的技术和市场优势,EPCOS迅速崛起为全球电子元器件市场的重要参与者。
面对数字化转型和能源转型的市场趋势,TDK-EPC公司积极调整战略方向,加大在传感器系统、新能源技术等领域的研发投入。通过与全球各大高校和研究机构的紧密合作,公司成功开发出了多款高性能的传感器系统和新能源产品,为客户提供了更加全面、高效的解决方案。这些成果不仅彰显了TDK-EPC公司的技术实力和市场竞争力,也为公司的未来发展奠定了坚实的基础。
ERGOBAHCO公司成立于20世纪90年代初,当时正值电子行业快速发展的黄金时期。公司创始人李明(化名)看准了市场对于高质量电子配件的需求,决定从电子连接器这一细分领域入手。然而,初创时期公司面临着资金短缺、技术落后等诸多挑战。李明凭借对市场敏锐的洞察力,成功争取到了几笔关键的投资,并带领团队攻克了一系列技术难关。通过不懈努力,ERGOBAHCO公司逐渐在电子连接器领域站稳了脚跟。
1984年,台湾的电子行业正迎来蓬勃发展的黄金时期。在这一年的10月,Bytesonic Corporation在台湾台北正式成立,标志着这家电子公司正式踏入竞争激烈的电子市场。初创时期,公司面临着资金短缺、技术匮乏等多重挑战,但凭借着创始人的远见卓识和团队的拼搏精神,公司逐渐在市场中站稳了脚跟。
一个有关于DAC0832奇怪的问题请大侠们帮我解一下急,谢谢了, 做一个输入 0~0XFF 的数字量,输出 0~5 V的模拟量,的数模转换! 原理图如下: file:///C:/Documents%20and%20Settings/Administrator/桌面/未命名.bmp 不论输入的数字量是多少,输出的一直是2.85V,R5,R8两端的电压也一直是对稳 ...… 查看全部问答∨ |
|
第一条 必须有一个圈子。无论如何做都是画地为牢:不加入一个圈子,就成为所有人的敌人;加入一个圈子,就成为另一个圈子的敌人;加入两个圈子,就等于没有加入圈子。只有独孤求败的精英才可完全避免圈子的困扰——这种人通常只有一个圈 ...… 查看全部问答∨ |
2-1-1-2.变压器铁芯的初始磁化曲线 下面我们继续对变压器铁芯的磁化过程进行详细分析。图2-3是多个直流脉冲电压连续加到变压器初级线圈a、b两端时,输入脉冲电压与变压器铁芯中磁通密度B或磁通对应变化的曲线图。图2-3-a)为输入电压各个直流脉冲 ...… 查看全部问答∨ |
RT 小弟是菜鸟,恳请给各位高手指点~~ Win ce5.0中,目前需要抛开输入法,仅使用手机键盘,可以使用一个切换键,比如#,切换进入英文输入状态,再按一次,返回数字状态 请问这该如何实现?… 查看全部问答∨ |
|
我在移植ucos到tms470过程当中,当所有的配置文件修改完了以后,在iar下进行烧写,在烧写过程中报错,开始提示一些.h文件不能找到,后来我将这些文件放到iar的源文件.bin目录下之后,这些文件就能找得到了,但是又有许多.c文件找不到。 请教高手, ...… 查看全部问答∨ |
|
【设计工具】Prototyping a residential gateway using Xilinx ISE This paper presents a residential gateway (RG) prototyping process using Xilinx Integrated Software Environment (ISE) version 6.1i. The RG was designed for broadband residential multiservices based on a SONET over DWDM (dense wave ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- 2024年Automechanika Shanghai海量同期活动刷新历届记录,汇聚行业智慧,共谋未来发展
- 企业文化分享 如何培养稀缺的硅IP专业人员?SmartDV开启的个人成长与团队协作之旅
- 恩智浦发布首个超宽带无线电池管理系统解决方案
- 北交大本科生探秘泰克先进半导体开放实验室,亲历前沿高科技魅力
- 新帅上任:杜德森博士(Dr. Torsten Derr)将于2025年1月1日出任肖特集团首席执行官
- 边缘 AI 如何提升日常体验
- 苹果要首发!台积电宣布2nm已准备就绪
- AMD有望用上全新芯片堆叠技术:延迟大幅减少、性能显著提升
- 宁德时代发布10月战报
- 2024年10月电池行业:增长势头不减!