stm32F407ZET6开发板用的官方例子串口1乱码?

原创 2018年04月16日 15:31:50
刚开始的时候,以为是晶振没弄清楚,检查了板子上是H8.000k5,那个官方文件HSE值也是8M没有问题的,,检查MDK的设置,也是8M,,,波特率程序初始化的是115200,调试助手也是115200呢,测试程序的时候单独发送一个字节数据调试助手也是受到不一样的值如0x01);助手收到的是F0或者F8。。。。折磨了很久,求助大神呢
用官方探索者stm32F407ZET6开发板的串口实验也乱码
这是串口相关配置及中断程序
#include "sys.h"
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////  
//Èç¹ûʹÓÃucos,Ôò°üÀ¨ÏÂÃæµÄÍ·Îļþ¼´¿É.
#if SYSTEM_SUPPORT_OS
#include "includes.h" //ucos ʹÓà  
#endif
//////////////////////////////////////////////////////////////////////////////////  
//±¾³ÌÐòÖ»¹©Ñ§Ï°Ê¹Óã¬Î´¾­×÷ÕßÐí¿É£¬²»µÃÓÃÓÚÆäËüÈκÎÓÃ;
//ALIENTEK STM32F4̽Ë÷Õß¿ª·¢°å
//´®¿Ú1³õʼ»¯   
//ÕýµãÔ­×Ó@ALIENTEK
//¼¼ÊõÂÛ̳:www.openedv.com
//ÐÞ¸ÄÈÕÆÚ:2014/6/10
//°æ±¾£ºV1.5
//°æȨËùÓУ¬µÁ°æ±Ø¾¿¡£
//Copyright(C) ¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾ 2009-2019
//All rights reserved
//********************************************************************************
//V1.3ÐÞ¸Ä˵Ã÷ 
//Ö§³ÖÊÊÓ¦²»Í¬ÆµÂÊϵĴ®¿Ú²¨ÌØÂÊÉèÖÃ.
//¼ÓÈëÁ˶ÔprintfµÄÖ§³Ö
//Ôö¼ÓÁË´®¿Ú½ÓÊÕÃüÁÄÜ.
//ÐÞÕýÁËprintfµÚÒ»¸ö×Ö·û¶ªÊ§µÄbug
//V1.4ÐÞ¸Ä˵Ã÷
//1,Ð޸Ĵ®¿Ú³õʼ»¯IOµÄbug
//2,ÐÞ¸ÄÁËUSART_RX_STA,ʹµÃ´®¿Ú×î´ó½ÓÊÕ×Ö½ÚÊýΪ2µÄ14´Î·½
//3,Ôö¼ÓÁËUSART_REC_LEN,ÓÃÓÚ¶¨Òå´®¿Ú×î´óÔÊÐí½ÓÊÕµÄ×Ö½ÚÊý(²»´óÓÚ2µÄ14´Î·½)
//4,ÐÞ¸ÄÁËEN_USART1_RXµÄʹÄÜ·½Ê½
//V1.5ÐÞ¸Ä˵Ã÷
//1,Ôö¼ÓÁ˶ÔUCOSIIµÄÖ§³Ö
//////////////////////////////////////////////////////////////////////////////////  
 


//////////////////////////////////////////////////////////////////
//¼ÓÈëÒÔÏ´úÂë,Ö§³Öprintfº¯Êý,¶ø²»ÐèҪѡÔñuse MicroLIB  
#if 1
#pragma import(__use_no_semihosting)             
//±ê×¼¿âÐèÒªµÄÖ§³Öº¯Êý                 
struct __FILE 

int handle; 
}; 


FILE __stdout;       
//¶¨Òå_sys_exit()ÒÔ±ÜÃâʹÓðëÖ÷»úģʽ    
_sys_exit(int x) 

x = x; 

//Öض¨Òåfputcº¯Êý 
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï   
USART1->DR = (u8) ch;      
return ch;
}
#endif
 
#if EN_USART1_RX   //Èç¹ûʹÄÜÁ˽ÓÊÕ
//´®¿Ú1ÖжϷþÎñ³ÌÐò
//×¢Òâ,¶ÁÈ¡USARTx->SRÄܱÜÃâĪÃûÆäÃîµÄ´íÎó  
u8 USART_RX_BUF[USART_REC_LEN];     //½ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö½Ú.
//½ÓÊÕ״̬
//bit15£¬ ½ÓÊÕÍê³É±êÖ¾
//bit14£¬ ½ÓÊÕµ½0x0d
//bit13~0£¬ ½ÓÊÕµ½µÄÓÐЧ×Ö½ÚÊýÄ¿
u16 USART_RX_STA=0;       //½ÓÊÕ״̬±ê¼Ç


//³õʼ»¯IO ´®¿Ú1 
//bound:²¨ÌØÂÊ
void uart_init(u32 bound){
   //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ʱÖÓ
 
//´®¿Ú1¶ÔÓ¦Òý½Å¸´ÓÃÓ³Éä
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9¸´ÓÃΪUSART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10¸´ÓÃΪUSART1

//USART1¶Ë¿ÚÅäÖÃ
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9ÓëGPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//¸´Óù¦ÄÜ
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ËÙ¶È50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍ츴ÓÃÊä³ö
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //ÉÏÀ­
GPIO_Init(GPIOA,&GPIO_InitStructure); //³õʼ»¯PA9£¬PA10


   //USART1 ³õʼ»¯ÉèÖÃ
USART_InitStructure.USART_BaudRate = bound;//²¨ÌØÂÊÉèÖÃ
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
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); //³õʼ»¯´®¿Ú1

  USART_Cmd(USART1, ENABLE);  //ʹÄÜ´®¿Ú1 

//USART_ClearFlag(USART1, USART_FLAG_TC);

#if EN_USART1_RX
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿ªÆôÏà¹ØÖжÏ


//Usart1 NVIC ÅäÖÃ
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//´®¿Ú1ÖжÏͨµÀ
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//ÇÀÕ¼ÓÅÏȼ¶3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //×ÓÓÅÏȼ¶3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀʹÄÜ
NVIC_Init(&NVIC_InitStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷¡¢


#endif

}




void USART1_IRQHandler(void)                 //´®¿Ú1ÖжϷþÎñ³ÌÐò
{
u8 Res;
#if SYSTEM_SUPPORT_OS //Èç¹ûSYSTEM_SUPPORT_OSΪÕ棬ÔòÐèÒªÖ§³ÖOS.
OSIntEnter();    
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //½ÓÊÕÖжÏ(½ÓÊÕµ½µÄÊý¾Ý±ØÐëÊÇ0x0d 0x0a½áβ)
{
Res =USART_ReceiveData(USART1);//(USART1->DR); //¶ÁÈ¡½ÓÊÕµ½µÄÊý¾Ý

if((USART_RX_STA&0x8000)==0)//½ÓÊÕδÍê³É
{
if(USART_RX_STA&0x4000)//½ÓÊÕµ½ÁË0x0d
{
if(Res!=0x0a)USART_RX_STA=0;//½ÓÊÕ´íÎó,ÖØпªÊ¼
else USART_RX_STA|=0x8000; //½ÓÊÕÍê³ÉÁË 
}
else //»¹Ã»ÊÕµ½0X0D
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//½ÓÊÕÊý¾Ý´íÎó,ÖØпªÊ¼½ÓÊÕ  
}  
}
}    
  } 
#if SYSTEM_SUPPORT_OS //Èç¹ûSYSTEM_SUPPORT_OSΪÕ棬ÔòÐèÒªÖ§³ÖOS.
OSIntExit();    
#endif

#endif


这是主函数


int main(void)

 
u8 t;
u8 len;
u16 times=0;  
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃϵͳÖжÏÓÅÏȼ¶·Ö×é2
delay_init(168); //ÑÓʱ³õʼ»¯ 
uart_init(115200); //´®¿Ú³õʼ»¯²¨ÌØÂÊΪ115200
LED_Init();   //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú  
while(1)
{
if(USART_RX_STA&0x8000)
{   
len=USART_RX_STA&0x3fff;//µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶È
printf("\r\nÄú·¢Ë͵ÄÏûϢΪ:\r\n");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]);         //Ïò´®¿Ú1·¢ËÍÊý¾Ý
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø
}
printf("\r\n\r\n");//²åÈë»»ÐÐ
USART_RX_STA=0;
}else
{
times++;
if(times%5000==0)
{
printf("\r\nALIENTEK ̽Ë÷ÕßSTM32F407¿ª·¢°å ´®¿ÚʵÑé\r\n");
printf("ÕýµãÔ­×Ó@ALIENTEK\r\n\r\n\r\n");
}
if(times%200==0)printf("ÇëÊäÈëÊý¾Ý,ÒԻسµ¼ü½áÊø\r\n");  
if(times%30==0)LED0=!LED0;//ÉÁ˸LED,ÌáʾϵͳÕýÔÚÔËÐÐ.
delay_ms(10);   
}
}
}

onenet mini 串口乱码的解决

stm32的库函数与串口乱码的原理与解决
  • jiangxxtt
  • jiangxxtt
  • 2016-08-25 12:03:01
  • 312

STM32F407ZET6 用串口通过键盘控制LED灯的亮灭

1、串口定义 串口通信是一种设备间非常常用串行通信(数据交互)方式,因为它比较简单便捷,大部分电子设备支持串口通信方式,电子工工程师调试设备时常用的接口串行通信:占用I/O较少,速度上较慢点 并...
  • zuidao3105
  • zuidao3105
  • 2017-09-28 11:33:34
  • 968

STM32F407官方开发板原理图

  • 2013年11月19日 15:39
  • 1.44MB
  • 下载

嵌入式Linux串口输出可疑乱码

最近整了块Cortex-M3的开发板,按板子的资料编了个uclinux内核写入flash运行,出现如下的乱码。 ~ # whoami root ~ # ls bin...
  • FIRSTSTARS
  • FIRSTSTARS
  • 2015-07-20 16:35:59
  • 1180

S3C2440--串口乱码解决办法

关于S3C2440,最近看到网上有很多朋友说出现串口乱码的问题,同时也看到很多朋友指出了一些解决的办法,但又看到有人说按网上提出的办法还是没能解决乱码问题,我提一个大家都没怎么提的地方吧,希望对大家有...
  • hongkeyin
  • hongkeyin
  • 2010-11-11 18:29:00
  • 1175

解决小钢炮低功耗蓝牙开发板使用官方库串口输出乱码问题

偶然一次机会,笔者幸运的得到一块STM32F401的蓝牙低功耗开发板,之前一直在用F1系列的进行开发,听说F4的浮点运算很强大,让我迫不及待的打开学习F4的大门,拿到板子的那天兴致勃勃的从ST的官网(...
  • Jonelec_Monica
  • Jonelec_Monica
  • 2016-05-26 07:10:47
  • 806

关于麒麟座开发板串口打印乱码与其它工程用官方源码出问题的解决方案

我用的是迷你板,感觉板子小巧精致甚是受大家喜爱。我们抱有学习目的同志们当然不能止步于只看官方的源码,只用官方的工程。那么自己建立工程学习的过程中一般你们会遇到程序在其它板子上跑的没问题,但下载到迷你板...
  • A511701105
  • A511701105
  • 2017-05-09 17:11:15
  • 283

putty乱码问题——图文并茂

我们通常通过putty来登陆远程的服务器,为我们的日常工作提供了方便,但是有些时候由于putty设置问题,而让系统的一些信息不能很好的显示。这里提供一种解决乱码问题的方法。 首先我们...
  • sun_168
  • sun_168
  • 2012-10-29 11:10:14
  • 2550

开发板串口连接

一、安装usb转串口线驱动 由于目前都采用笔记本开发,所以需要具备USB转串口线,usb口接在pc机上,另外一端与串口线连接。USB转串口线驱动为CH340-USB 安装成功的标志如下截图1 ...
  • ananli
  • ananli
  • 2017-02-03 07:27:17
  • 299

Android开发板之串口开发

Android开发板之串口开发简介 首先描述一下我的应用项目,它是一个简单的智能盒子,主要内容:是通过Android开发板上的串口进行数据的读取操作,一块android开发板外接一个Arduino...
  • u012926088
  • u012926088
  • 2016-05-30 11:22:36
  • 9961
收藏助手
不良信息举报
您举报文章:stm32F407ZET6开发板用的官方例子串口1乱码?
举报原因:
原因补充:

(最多只允许输入30个字)