STM32模拟串口输出偶有乱码

2018-06-10 12:14:54来源: eefocus 关键字:STM32  模拟串口输出  乱码

因为芯片串口不够用,只好用IO口模拟串口,在网上下载了个模拟串口的程序,可运行,但发现串口输出隔几个字符就会出现乱码,主要部分代码如下:


  1. #define OI_TXD  PAout(12)  

  2. #define OI_RXD  PAin(11)  

  3.   

  4. #define BuadRate_9600   100  

  5.   

  6. u8 len = 0; //接收计数  

  7. u8 USART_buf[11];  //接收缓冲区  

  8.   

  9. u8 recvStat = COM_STOP_BIT;  

  10. u8 recvData = 0;  

  11.   

  12. void IO_TXD(u8 Data)  

  13. {  

  14.     u8 i = 0;  

  15.     OI_TXD = 0;    

  16.     delay_us(BuadRate_9600);  

  17.     for(i = 0; i < 8; i++)  

  18.     {  

  19.         if(Data&0x01)  

  20.             OI_TXD = 1;    

  21.         else  

  22.             OI_TXD = 0;       

  23.           

  24.         delay_us(BuadRate_9600);  

  25.         Data = Data>>1;  

  26.     }  

  27.     OI_TXD = 1;  

  28.     delay_us(BuadRate_9600);  

  29. }  

  30.       

  31. void USART_Send(u8 *buf, u8 len)  

  32. {  

  33.     u8 t;  

  34.     for(t = 0; t < len; t++)  

  35.     {  

  36.         IO_TXD(buf[t]);  

  37.     }  

  38. }  

  39.       

  40.  void IOConfig(void)  

  41.  {  

  42.     GPIO_InitTypeDef  GPIO_InitStructure;  

  43.     NVIC_InitTypeDef NVIC_InitStructure;  

  44.     EXTI_InitTypeDef EXTI_InitStruct;  

  45.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE);  //使能PB,PC端口时钟   

  46.        

  47.      //SoftWare Serial TXD  

  48.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;        

  49.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       //推挽输出  

  50.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      //IO口速度为50MHz     

  51.   GPIO_Init(GPIOA, &GPIO_InitStructure);                      

  52.   GPIO_SetBits(GPIOA,GPIO_Pin_12);                        

  53.        

  54.        

  55.     //SoftWare Serial RXD  

  56.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;  

  57.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  

  58.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       

  59.     GPIO_Init(GPIOA, &GPIO_InitStructure);     

  60.   

  61.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource11);  

  62.     EXTI_InitStruct.EXTI_Line = EXTI_Line11;  

  63.     EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;  

  64.     EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling; //下降沿触发中断  

  65.     EXTI_InitStruct.EXTI_LineCmd=ENABLE;  

  66.     EXTI_Init(&EXTI_InitStruct);  

  67.   

  68.   

  69.     NVIC_InitStructure.NVIC_IRQChannel= EXTI15_10_IRQn ;   

  70.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;   

  71.     NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;    

  72.     NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;    

  73.     NVIC_Init(&NVIC_InitStructure);    

  74.       

  75. }  


  76. int main(void)  

  77. {         

  78. delay_init();  

  79.        IOConfig();  

  80.        while(1)  

  81. {  

  82.     USART_Send("100",3);  

  83.     delay_ms(100);  

  84. }  

一般出现输出乱码,可能是输出部分延时不够造成的,于是检查输出部分使用延时的情况,发现USART_Send中没有用到延时,所在在USART_Send中加入一个1ms的延时,错误解除,改过的代码如下:


  1. void USART_Send(u8 *buf, u8 len)  

  2. {  

  3.     u8 t;  

  4.     for(t = 0; t < len; t++)  

  5.     {  

  6.         IO_TXD(buf[t]);  

  7.         delay_ms(1);  

  8.     }  

  9. }  

延时虽然简单,但有时真的会发挥很大的作用。


关键字:STM32  模拟串口输出  乱码

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2018061039726.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32F1xx单片机使用固件库时串口打印乱码的解决办法
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

网友正在学习IC视频

推荐阅读
全部
STM32
模拟串口输出
乱码

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved