STM32模拟串口(UART)使用

1、添加头文件
首先我们先添加相应的头文件。既然我们要进行对串口的模拟,因此我们要先了解uart相关的通信协议。由于uart的通信方式是由1个起始位,8个数据位,包含一个奇偶校验位,和结束位构成因此我们将使用单片机中的两个普通的io口电平的高低进行对相应时序的模拟。
#include stm32f10x.h#include vuart2.h  
2、宏定义
使用到的io口为
#define oi2_txd pdout(6)#define oi2_rxd pdin(7)#define buadrate2_9600 104 #define recive2_byte 19 //接收缓冲器的个数u8 len2 = 0; //接收计数u8 usart2_buf[recive2_byte];  //接收缓冲区  
将io口相应的位带操作函数进行宏定义从而使得在对不同的电平的进行转换的时候更为方便,并且减少了调用其他函数的过程所消耗的时间,程序执行效率更高。
在本次的传输过程中我选用的是使用波特率速率为9600,也就是1s中发送9600个字节,因此对每个字节数据进行计算1000000us/9600可以得出,发一个字节的数据需要进行大概需要 104.16us并且对于相应的电平持续时间要求误差不能超过±5%因此对我们进行时间的控制要求就显得比较重要了。
3、枚举出各个位
enum{    com_start_bit,    com_d0_bit,    com_d1_bit,    com_d2_bit,    com_d3_bit,    com_d4_bit,    com_d5_bit,    com_d6_bit,    com_d7_bit,    com_stop_bit,};u8 recvstat2 = com_stop_bit;u8 recvdata2 = 0;  
4、io——txd进行模拟
void io2_txd(u8 data){    u8 i = 0;    oi2_txd = 0;      delay_us(buadrate2_9600);    for(i = 0; i >1;    }    oi2_txd = 1;    delay_us(buadrate2_9600);}  
由于发送的信号是将txd信号进行拉低处理,因此在拉低txd相应的io口之后进行延时处理,再进行循环对我们需要发送的各个位的数据继续进行发送循环发送完成之后将电平拉高代表停止位。
5、构建发送函数
void usart2_send(u8 *buf, u8 len2){    u8 t;    for(t = 0; t  recive2_byte-1)//将数据通过回显到串口调试助手中            {                len2 = 0;                usart2_send(usart2_buf,recive2_byte);            }            return;        }        if(oi2_rxd)//采集rxd各个电平        {            recvdata2 |= (1 << (recvstat2 - 1));        }else{            recvdata2 &= ~(1 <1;    }    oi2_txd = 1;    delay_us(buadrate2_9600);}    void usart2_send(u8 *buf, u8 len2){    u8 t;    for(t = 0; t  recive2_byte-1)        {            len2 = 0;            usart2_send(usart2_buf,recive2_byte);        }            return;        }        if(oi2_rxd)        {            recvdata2 |= (1 << (recvstat2 - 1));        }else{            recvdata2 &= ~(1 << (recvstat2 - 1));        }   }  }  
vuart2.h
#ifndef __vuart2__h#define __vuart2__h#include stm32f10x.hvoid io2_txd(u8 data);void usart2_send(u8 *buf, u8 len);void io2config(void);void tim5_int_init(u16 arr,u16 psc);#endif  


处理器基准频率高好还是低好 处理器基准频率和加速频率哪个重要
今日看点丨三星4纳米良率改善 分食台积电特斯拉订单;印度首度跃居苹果iPhone第五大市场
恒温恒湿试验箱:一种重要的环境模拟设备
电源芯片220V降压5V170mA小家电控制板芯片AH8652
储能连接器生产流程都在这里了
STM32模拟串口(UART)使用
带你走近MISRA C:2012
楼宇对讲系统的安装_楼宇对讲系统的安装注意事项
以后可以不用抢车位吗
智慧工地管理系统让工程建设更高效
激光碳化直写碳功能材料相关研究进展
如何使用OpenCV来实现模型加载与推演
具有抗过载特性的5V/3A稳压电路参考设计
雷达水位检测系统的原理、特点及功能
“难产”的iPhone 12暴露出苹果的三大隐患,它可能没那么完美
电力部温度测量系统的一般要求
分享无线技术面临的安全挑战及应对措施分享
在电子秤方案开发上面使用的SOC芯片
RF电路设计的常见问题 射频电路布局原则
光互联,什么是光互联