最近在做一个项目时候,发现之前工程师选择的片上资源相对紧张,仅有2个串口,而且已经都被占用了。考虑使用iic通信但又需要对面设备实现模拟IIC从机,相对麻烦。使用spi的话,总线数变多,不考虑。那么问题来了,在片上资源紧张的情况下,我该如何通过拓展已有的资源增加一个通信方式呢?答案:模拟串口。
目前只实现了TXD部分,RXD部分优化中。话不多说,上代码
uart_sw.h
- #ifndef SOFTWARE_UART_H
- #define SOFTWARE_UART_H
-
- #include "gd32f30x_it.h"
- #include "main.h"
- #include "systick.h"
- #include "gd32f30x.h"
- #include "gd32f30x_gpio.h"
-
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #define UART_SEND_MAX_LEN 100
-
- typedef enum __uart_send_status_t{
- UART_SEND_STATUS_STOP = 0,
- UART_SEND_STATUS_START,
- UART_SEND_STATUS_SENDING,
- }uart_send_status_t;
-
- typedef enum __uart_recv_status_t{
- UART_RECV_STATUS_STOP = 0,
- UART_RECV_STATUS_START,
- UART_RECV_STATUS_RECVING,
- }uart_recv_status_t;
-
- typedef enum __uart_send_step_t{
- UART_SEND_STEP_ZEO = 0,
- UART_SEND_STEP_FST = 1,
- UART_SEND_STEP