STM32中IO口模拟串口输出的乱码现象

发布者:legend9最新更新时间:2024-04-11 来源: elecfans关键字:STM32  IO口  模拟串口输出 手机看文章 扫描二维码
随时随地手机看文章

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

STM32中IO口模拟串口输出的乱码现象

[cpp] view plain copy#define OI_TXD PAout(12)

#define OI_RXD PAin(11)

#define BuadRate_9600 100

u8 len = 0; //接收计数

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

u8 recvStat = COM_STOP_BIT;

u8 recvData = 0;

void IO_TXD(u8 Data)

{

u8 i = 0;

OI_TXD = 0;

delay_us(BuadRate_9600);

for(i = 0; i 《 8; i++)

{

if(Data&0x01)

OI_TXD = 1;

else

OI_TXD = 0;

delay_us(BuadRate_9600);

Data = Data》》1;

}

OI_TXD = 1;

delay_us(BuadRate_9600);

}

void USART_Send(u8 *buf, u8 len)

{

u8 t;

for(t = 0; t 《 len; t++)

{

IO_TXD(buf[t]);

}

}

void IOConfig(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

EXTI_InitTypeDef EXTI_InitStruct;

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

//SoftWare Serial TXD

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;

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

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

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_SetBits(GPIOA,GPIO_Pin_12);

//SoftWare Serial RXD

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource11);

EXTI_InitStruct.EXTI_Line = EXTI_Line11;

EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;

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

EXTI_InitStruct.EXTI_LineCmd=ENABLE;

EXTI_Init(&EXTI_InitStruct);

NVIC_InitStructure.NVIC_IRQChannel= EXTI15_10_IRQn ;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;

NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

[cpp] view plain copyint main(void)

{

delay_init();

IOConfig();

while(1)

{

USART_Send(“100”,3);

delay_ms(100);

}

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

[cpp] view plain copyvoid USART_Send(u8 *buf, u8 len)

{

u8 t;

for(t = 0; t 《 len; t++)

{

IO_TXD(buf[t]);

delay_ms(1);

}

}

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


关键字:STM32  IO口  模拟串口输出 引用地址:STM32中IO口模拟串口输出的乱码现象

上一篇:超详细的STM32单片机学习笔记汇总
下一篇:STM32串口实现485双机通信的原理

推荐阅读最新更新时间:2026-03-21 04:35

STM32模拟串口输出偶有乱码
因为芯片串口不够用,只好用IO口模拟串口,在网上下载了个模拟串口的程序,可运行,但发现串口输出隔几个字符就会出现乱码,主要部分代码如下: #define OI_TXD PAout(12) #define OI_RXD PAin(11) #define BuadRate_9600 100 u8 len = 0; //接收计数 u8 USART_buf ; //接收缓冲区 u8 recvStat = COM_STOP_BIT; u8 recvData = 0; void IO_TXD(u8 Data) { u8 i = 0; OI_TXD = 0;
[单片机]
编码器失灵、乱码现象的解决办法
日常生活中,家用电器上的旋转开关偶尔会出现失灵、乱码等现象,造成设备无法正常使用,但其实,旋转开关的问题主要是由于内部的编码器造成的,那为何会发生这种现象呢?事后又该如何补救?那么接下来,元泰电子编码器小课堂就将为大伙介绍下编码器出现失灵乱码等原因,以及解决方法。 家用电器旋转开关如果出现开关失灵,或者档位不精准,一般情况下都是内部的编码器出了问题。旋转编码器由码盘、档把等组成,主要是控制与测量设备的运动,如控制设备运行速度、档位等。如果编码器出现了故障,就容易造成设备档位不准、运行速度不精确。 造成失灵或者乱码的原因一般如下: 码盘出现破损。码盘损坏了,碳膜层接触不良,无法正确识别定位。 档把磨损。编码器档位磨损
[嵌入式]
STM32 JTAG接口PB3PB4配置为IO口使用问题
因为IO口紧张,在原理绘制期间就利用了PB3和PB4,但是在调试程序的时候才发现,PB3和PB4控制不了。 查看了一下芯片手册,发现芯片在上电后,居然默认是JTAG接口,怪自己粗心了。 JTAG和SWD接口对照如下图。 我们可以看到PB3,PB4,PA15都被利用为JTAG接口中,SWD接口只要PA13,PA14。 所以为了重新使用PB3,PB4,我关闭JTAG功能, RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //开启AFIO时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); //禁止JTAG功
[单片机]
<font color='red'>STM32</font> JTAG接口PB3PB4配置为<font color='red'>IO口</font>使用问题
stm32单片机中使用GPIO口模拟PWM输出解析
  STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核(ST‘s product portfolio contains a comprehensive range of microcontrollers, from robust, low-cost 8-bit MCUs up to 32-bit ARM-based Cortex®-M0 and M0+, Cortex®-M3, Cortex®-M4 Flash microcontrollers with a great choice of peripherals. ST has also extended this range t
[单片机]
<font color='red'>stm32</font>单片机中使用GP<font color='red'>IO口</font><font color='red'>模拟</font>PWM<font color='red'>输出</font>解析
STM32单片机的八种IO口模式讲解
八种IO口模式 STM32有八种IO口模式,分别是:模拟输入、浮空输入、上拉输入、下拉输入、开漏输出、推挽输出、复用开漏输出和复用推挽输出。 1、模拟输入 GPIO_Mode_AIN模拟输入,即关闭施密特触发器,将电压信号传送到片上外设模块(不接上下拉电阻)。 2、浮空输入 GPIO_Mode_IN_FLOATING浮空输入。浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。 3、上下拉输入 GPIO_Mode_IPD下拉输入,GPIO_Mode_IPU上拉输入。一般来讲,上拉电阻为1K-10K,电阻越小,驱动能力越强。 电阻的作用:防止输入端悬空,减少外部电流
[单片机]
<font color='red'>STM32</font>单片机的八种<font color='red'>IO口</font>模式讲解
STM32单片机的八种GPIO口模式
GPIO 是通用输入/输出端口的简称,本文以STM32为例进行说明,其他的单片机功能上都是大同小异,学会STM32的GPIO,我们可以触类旁通。 GPIO 的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32的八种GPIO口模式 1) GPIO_Mode_AIN 模拟输入; 2) GPIO_Mode_IN_FLOATING 浮空输入; 3) GPIO_Mode_IPD 下拉输入; 4) GPIO_Mode_IPU 上拉输入; 5) GPIO_Mode_Out_OD 开漏输出; 6) GPIO_Mode_Out_PP 推挽输出; 7) GPIO_Mode_AF_OD 复用开漏输
[单片机]
<font color='red'>STM32</font>单片机的八种GP<font color='red'>IO口</font>模式
STM32单片机GPIO口的学习
  GPIO:   STM32的(64引脚的)IO口一共有3个,分别是PA、PB、PC.   STM32的IO端口可以由软件配置成8种模式:   1,输入浮空   2,输入上拉   3,输入下拉   4,模拟输入   5,开漏输出   6,推挽输出   7,推挽复用功能   8,开漏复用功能   STM32的每个IO端口都有7个寄存器来控制。他们分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;一个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR;我们常用的IO端口寄存器只有4个:CRL、CRH、IDR、ODR。   注意(在配置ST
[单片机]
嵌入式STM32的GPIO口工作模式的介绍
  一。输入模式   1. 浮空输入   浮空输入模式下,上拉和下拉两个开关断开,高或低电平通过施密特触发器到达输入数据寄存器,CPU可以通过读取输入数据寄存器从而读取到外部输入的高低电平值。   2. 输入上拉模式   上拉电阻开关连上,上拉电阻的阻值为30k-50k。   3. 输入下拉模式   下拉电阻开关连上。   4. 模拟输入模式   模拟输入方式时外部信号为模拟量,不是高低电平。   注意信号没有经过施密特触发器。   另外上拉下拉都无效。
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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