历史上的今天
返回首页

历史上的今天

今天是:2025年06月10日(星期二)

正在发生

2018年06月10日 | STM32模拟串口输出偶有乱码

2018-06-10 来源:eefocus

因为芯片串口不够用,只好用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. }  

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


推荐阅读

史海拾趣

Enovation Controls LLC公司的发展小趣事

由于篇幅限制,我无法直接为您提供5个完整的、每篇至少500字的Enovation Controls LLC公司发展起来的相关故事。但我可以概述5个关键事件或阶段,这些事件对于Enovation Controls LLC公司的发展起到了重要作用。

  1. EControls的成立与专长

Enovation Controls LLC的前身可以追溯到1994年成立的EControls公司。由Kennon Guglielmo博士创立,EControls专注于为发动机和车辆行业的OEM提供完整的发动机控制解决方案的设计、工程和生产。凭借其在发动机控制领域的专业技术和经验,EControls逐渐在行业中树立了领先地位。

  1. EControls与FW Murphy的合并

2009年,EControls与FW Murphy合并,成立了Enovation Controls LLC。FW Murphy是一家历史悠久的公司,由Frank W. "Pat" Murphy于1939年创立,专注于发动机仪表和保护的创新。这次合并将EControls的发动机控制技术与FW Murphy的仪器和显示功能相结合,为客户提供了更为全面和先进的发动机控制、保护和监控解决方案。

  1. 创新传统的建立

Enovation Controls继承了FW Murphy的开拓精神和对简单、可靠发动机保护的追求。公司拥有一支由300多名员工组成的多元化国际团队,他们通过全球销售、制造和应用工程业务为世界各地的客户提供服务。这种全球化的布局和多元化的团队为Enovation Controls的创新和发展提供了强大的支持。

  1. 业务部门的拓展

合并后,Enovation Controls经营着四个业务部门:动力控制、车辆技术、天然气生产控制和燃料系统。这些业务部门覆盖了广泛的行业和应用领域,包括离路车辆、娱乐和商业船只、农业和水泵、发电、工业和移动设备等。通过不断拓展业务领域和深化技术应用,Enovation Controls在电子行业中建立了稳固的地位。

  1. 新产品的推出与市场反响

Enovation Controls不断推出新产品和技术创新,以满足客户不断变化的需求。例如,在2016年推出的TEC-10控制器就是一款为工业需求量身定制的控制器。这款控制器具有强大的功能和灵活性,适用于各种应用场景。由于其出色的性能和易用性,TEC-10控制器在市场上获得了广泛的好评和认可。

这些事件和阶段共同构成了Enovation Controls LLC公司发展起来的重要历程。通过不断创新、拓展业务领域和推出新产品,Enovation Controls在电子行业中取得了显著的成就和地位。

ETL semiconductor公司的发展小趣事

三星(Samsung)原本是一家以家电和电子产品为主的综合性企业。然而,在半导体行业快速发展的背景下,三星决定加大在半导体领域的投入。经过数十年的努力,三星不仅在存储芯片领域取得了显著成就,还在逻辑芯片和代工业务方面取得了重要进展。如今,三星已成为全球领先的半导体企业之一。

Galaxy ( Bel )公司的发展小趣事

三星(Samsung)原本是一家以家电和电子产品为主的综合性企业。然而,在半导体行业快速发展的背景下,三星决定加大在半导体领域的投入。经过数十年的努力,三星不仅在存储芯片领域取得了显著成就,还在逻辑芯片和代工业务方面取得了重要进展。如今,三星已成为全球领先的半导体企业之一。

台湾君耀(Brightking)公司的发展小趣事

为了进一步提升竞争力,君耀开始实施国际化战略。公司在日本、中国大陆等地设立生产基地,利用当地的资源和优势,提高生产效率,降低成本。同时,君耀积极参与国际认证,其产品通过UL、VDE、TUV、CSA等一系列国际认证,为进军国际市场打下了坚实的基础。

CONTRINEX公司的发展小趣事

面对海洋环境的独特挑战,Contrinex推出了海洋系列传感器。这些传感器采用全金属技术,外壳材质为V4A/AISI 316L不锈钢,防护等级高达IP68/IP69K,能够抵御恶劣的海洋环境。同时,该系列传感器还具备卓越的EMC防护性能,能够满足各种海洋应用需求。这一创新产品的推出,进一步巩固了Contrinex在传感器行业的领先地位。

明波通信(BWAVE)公司的发展小趣事

在2002年,一群从海外归来的留学生和技术专家,怀揣着对通信技术的热情与梦想,在上海创立了明波通信技术股份有限公司。他们深知国内在通信领域的技术与海外相比还有较大差距,因此决心将自己在海外学到的先进知识和经验,应用到国内的市场和技术创新中。明波通信从创立之初就致力于数字电视芯片的研究与开发,并逐渐在行业中崭露头角。

问答坊 | AI 解惑

图形点阵液晶显示模块介绍

图形点阵液晶显示模块介绍 [ 打印 ] [ 返回 ] 1.概述 ZJM12864BSBD是一低功耗的点阵图形式LCD模块。 1)显示格式:128点(列) × 64 点(行)。 2)显示类型:STN 黄绿模式、半反半透、6:00视角、正向显示。 3)驱动方式:1/64占 ...…

查看全部问答>

求V型MEMS热微执行器在实际应用中的数据

我想找些V型MEMS热微执行器在实际应用中有关[url=https://bbs.eeworld.com.cn/thread-75155-1-1.html]驱动[/url]力和[url=https://bbs.eeworld.com.cn/thread-75155-1-1.html]驱动[/url]位移的具体数据,网上一直没找到,在这希望各位帮帮忙,谢谢 ...…

查看全部问答>

数码管字形码自动生成器

这是一款非常小巧实用的软件,可以快速计算出任意接法的8段数码管字形码,很不错的东西,拿出来分享分享…

查看全部问答>

DSP+BUILDER与VHDL混合设计方法实现DDS信号源

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 DSP+BUILDER与VHDL混合设计方法实现DDS信号源  …

查看全部问答>

有在EK-STM32F下成功移植oc/os的朋友吗

是否J-LINK II不支持os仿真?请斑竹给一下相关例程参考~…

查看全部问答>

有没有FSMC的中文文档

                                 FSMC最近看的晕里糊涂的?有没有什么中文文档而且讲清楚一点的呢?有的话,哪位说一说在哪里?…

查看全部问答>

老夫琢磨了好久,还是打算抛弃NXP用ST了

需求基本类似,所以摇摆了好多年 …

查看全部问答>

为什么keil无法编译

我最近在做一个SMbus的红外测温写了一个程序但不知道为什么无法编译。。求大侠们指点啊具体代码如下啊#include <reg51.h>#include\"intrins.h\"//************************************ #define    uint unsigned int#defi ...…

查看全部问答>

关于简易旋转倒立摆的讨论。

本帖最后由 paulhyde 于 2014-9-15 03:13 编辑 关于简易旋转倒立摆的想法  …

查看全部问答>

提问+三维场景如何建立

小弟最近在做手势识别方面的试验,不知道像下图这样的三维场景如何建立呢。 查了资料,基本都是OpenGL的,但是目测有点难呢,教程怎么都是2002年左右的呀,正在纳闷难道就没更新了。坛子里的前辈们,有哪位能给指点下的,谢谢啦。 …

查看全部问答>