通用GPIO模拟串口,提供源代码,本人经过测试OK。(第一版)

本文介绍了一种使用STM32的GPIO模拟串口的方法,通过修改my_board宏,可以方便地将代码移植到其他支持定时器的单片机。提供了`serial.h`和`serial.c`的源代码,包括串口初始化、中断服务程序以及数据发送和接收的实现。代码中包含了串口结构体、奇偶校验和停止位的处理,同时展示了如何发送和接收字节数据。
摘要由CSDN通过智能技术生成

--------------------------serial.h------------------------------------------

#ifndef _SERIAL_H_
#define _SERIAL_H_
#define my_board
#ifdef my_board //只需修改这里,就可移植到STM32等多种支持定时器的单片机中。
void rx_timer_inter(void);
void tx_timer_inter(void);
void init_timer(void);
void start_tx_timer(void);//接收和发送分别采用一个定时器
void start_rx_timer(void);
void stop_rx_timer(void);
void stop_rx_timer(void);
//GPIO模块串口TX
//GPIO模拟串口RX
void init_gpio(void); //配置TX为输出,RX为输入管脚,并设置TX管脚的初始状态为1
unsigned char read_rx_line(void);
void write_tx_line(unsigned char dat);
#endif

//串口信息的结构体
struct serial_t{
 unsigned char digital;
 unsigned char parriy;  //none even odd
 unsigned char stop;
 unsigned char baud;
};
static struct serial_t serial;
static unsigned char tx_flag=0; //定时器修改此标志
static unsigned char rx_flag=0; //
unsigned char make_odd_bit(unsigned char ch);
unsigned char make_even_bit(unsigned char ch);
unsigned char odd_check(unsigned char ch,unsigned char check);
unsigned char even_check(unsigned char ch,unsigned char check);
void serial_init(void);
unsigned char recv_one_bit(void);
unsigned char is_start_bit(void);
unsigned char is_stop_bit(void);
unsigned char recv_one_byte(unsigned char *ch);
unsigned char recv_n_byte(unsigned char *buf);
void send_one_byte(unsigned char ch);
void send_n_byte(unsigned char *buf,unsigned char num);

#endif

------------------------------------------------------------------

----------------------------serial.c--------------------------------

#include "serial.h"
#include "global.h"

#ifdef my_board

void rx_timer_inter(void)//中断服务程序
{
 rx_flag = 1;
}

void tx_timer_inter(voi

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值