历史上的今天
返回首页

历史上的今天

今天是:2024年08月28日(星期三)

正在发生

2018年08月28日 | STM32 USART出现乱码

2018-08-28 来源:eefocus

USART使用串口助手调试时出现乱码的情况,一般都是波特率的问题,例如:向串口发送“hello world\r\n”,但是串口助手收到的数据却是这样: 
usart

于是我仔细检查代码中设置的波特率的大小,发现没错,也是设置为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文件,找到下图位置: 
1

把其中的HSE_VALUE改为开发板实际的值即可 
2

修改好重新编译下载到开发板中运行,此时串口助手能正常显示接收的数据。 
3


推荐阅读

史海拾趣

Auctor Corp公司的发展小趣事

Auctor Corp公司的创始人,一群富有远见和冒险精神的工程师,怀揣着对电子技术的热情和对市场的敏锐洞察,决定共同创办这家公司。在创业初期,公司面临着资金紧张、技术储备不足等多重困难。然而,团队成员们凭借着坚韧不拔的精神和对技术的执着追求,通过自主研发和不断改进,逐渐在市场上站稳了脚跟。

DENWIRE公司的发展小趣事

在产品质量和技术水平得到市场认可后,Auctor Corp公司开始积极拓展市场。公司通过与国内外知名企业建立合作关系,成功将产品打入多个国家和地区的市场。同时,公司还注重品牌塑造,通过参加国际电子展会、举办产品发布会等方式,提升品牌知名度和影响力。这些举措使得Auctor Corp在电子行业中的地位逐渐提升。

ETERNA公司的发展小趣事

除了在制表业取得显著成就外,ETERNA还在生物技术领域进行了积极探索。公司利用专有的非病毒、非DNA方法,使用mRNA进行细胞重编程研究。这一技术旨在通过表达特定的蛋白质来逆转细胞的老化过程,实现“倒转时钟”的效果。虽然ETERNA在mRNA领域的具体成果尚未对外公布,但其在该领域的探索精神和技术实力已经引起了业界的广泛关注。

德旭电子(DEXU)公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,德旭电子深知只有不断创新才能在竞争中立于不败之地。因此,公司始终坚持技术创新和产业升级的战略方向。

德旭电子在产品研发方面不断投入大量人力物力,积极引进国内外先进技术和管理经验。同时,公司还加强与高校、科研机构的合作与交流,共同开展技术研发和人才培养工作。这些举措使得德旭电子在技术创新方面取得了显著成果,不断推出具有市场竞争力的新产品和新技术。

COMPEX公司的发展小趣事

COMPEX公司自成立以来,一直致力于电子技术的研发与创新。在光通讯领域,公司凭借先进的光通讯模块电路板小器件技术,逐渐在市场中占据了一席之地。COMPEX团队不断突破技术壁垒,推出了多款高性能、高可靠性的产品,赢得了客户的广泛认可。同时,公司还积极与国内外知名企业和研究机构合作,共同推动电子行业的技术进步。

德立电子(DDY)公司的发展小趣事

在1991年,德立电子(DDY)在惠州市创立,以生产电感为核心产品,开启了其在电子行业的征程。当时,公司规模虽小,但凭借对技术的执着追求和对市场敏锐的洞察力,德立电子迅速在汽车电子、色环电感等领域取得突破。公司引进美国、日本、台湾等地的先进机械设备及检测仪器,确保产品质量,赢得了客户的信赖。

问答坊 | AI 解惑

Cirrus消费和汽车电子用高品质ADC CS5343/4

2月14日讯, Cirrus Logic公司为进一步扩大其模拟和混合信号音频转换器集成电路产品线,新近推出了两款面向各种消费和汽车音频产品,诸如机顶盒、数字电视、DVD刻录机、音频/视频接收机、车内娱乐及服务系统和乐器等应用的立体声模数转换器(ADC)CS ...…

查看全部问答>

MODELSIM入门培训教程

本帖最后由 paulhyde 于 2014-9-15 09:10 编辑 MODELSIM入门培训教程  …

查看全部问答>

VHDL中定义字符串,出错!

type char_arry is array(0 to 15) of character;constant fist_line:char_arry:={\' \',\'t\',\'h\',\'e\',\' \',\'F\',\'I\',\'R\',\' \',\'d\',\'a\',\'t\',\'a\',\' \',\'i\',\'s\'}; 报错为:Error (10500): VHDL syntax error at LCD1602.VH ...…

查看全部问答>

求一个at91sam9261的bsp

我买的开发板是英贝德的9261,由于新学,对很多东西都不是很懂,而这个开发板有没有现成的bsp模板,哪位能提供一份at91sam9261的bsp模板吗?最好是某家开发板商自带的或者自己做的bsp,可以编译通过的。我绝对不是觊觎您的技术,纯粹是为了学习,相 ...…

查看全部问答>

wince s3c2440 camera 问题??

我的摄像头分辨率是720*288的,在7寸TFT上显示(800*480),调试时发现,水平方向左右两端的图像缺失,不能完整显示,其他的正常。请问这是啥原因??高手指点,急!!! …

查看全部问答>

CE6.0烧写求助

我现在烧写ce6.0的nk.bin 下面是返回的串口信息。但是在最下面一行出现了错误,请大家帮助分析一下 Selection: D Mark the bootimage area in Flash as RESERVED. LAN91C111 EbootDeviceAddress B9C00300 pKITLArgs->MAC: 3412:7856:2391 LAN9 ...…

查看全部问答>

linux没装成,硬盘也没了。

两块硬盘。 打算在第二块硬盘(Primary Slave)的最后一个分区,安装linux系统。(这个想法好像也不正确) linux分区定制划分完后,开始安装linux时,提示“设备忙....”什么的。 linux没装成,重启系统后,windows下无法识别第二块硬盘。 奇怪的 ...…

查看全部问答>

vc2005智能设备程序dialog下可以使用的ocx(win32)在vc#2005智能设备程序下不能使用,变灰,这个原因再哪儿?高手帮忙

vc2005智能设备程序dialog下可以使用的ocx(win32)在vc#2005智能设备程序下不能使用,变灰,这个原因再哪儿?高手帮忙…

查看全部问答>

求一个LSD-FETUIF USB口烧写器的驱动

求一个LSD-FETUIF USB口烧写器的驱动求一个LSD-FETUIF USB口烧写器的驱动求一个LSD-FETUIF USB口烧写器的驱动求一个LSD-FETUIF USB口烧写器的驱动求一个LSD-FETUIF USB口烧写器的驱动…

查看全部问答>

观念改变带来巨大节能效益

——浅析“按需照明”的深刻意义 目前,多数建筑内的公共空间如走廊、步行梯、停车场、卫生间、电梯前室,一般是靠传统灯具长时间照明,而这些地方有时却空无一人,电能被白白消耗。如何解决这个普遍存在的“无效照明”问题?华威凯德照明科技( ...…

查看全部问答>