在做项目的过程中,经常发生UART口不够用的情况,可以用GPIO口来软件模拟UART。
硬件MCU型号:华芯微特SWM181(其它MCU大同小异)
实现功能:debug串口
原理:GPIO+定时器
DBG_RX_T Dbg_Rx = {
{0x00},
RX_BUF_LEN - 1,
0,
0,
0,
DBG_RX_IDLE
};
DBG_TX_T Dbg_Tx = {
NULL,
0,
0,
0,
0
};
#define DBG_TX_LOW() GPIO_ClrBit(GPIOA, PIN1)
#define DBG_TX_HIGH() GPIO_SetBit(GPIOA, PIN1)
#define DBG_RX_Value() GPIO_GetBit(GPIOA, PIN0)
/******************************************************************************************************************************************
* 函数名称: Dbg_Rx_Clear()
* 功能说明: 接收模块状态清除
* 输 入: 无
* 输 出: 无
* 注意事项: 无
******************************************************************************************************************************************/
static void Dbg_Rx_Clear(void)
{
Dbg_Rx.ChrIdx = 0;
Dbg_Rx.State = DBG_RX_IDLE;
}
/******************************************************************************************************************************************
* 函数名称: Dbg_RX_State()
* 功能说明: IOUART接收模块当前状态
* 输 入: 无
* 输 出: uint32_t IOUART_RX_IDLE、IOUART_RX_BUSY、IOUART_RX_SUCCESS、UOUART_RX_TIMEOUT、IOUART_RX_FRAMERR
* 注意事项: 无
******************************************************************************************************************************************/
uint32_t Dbg_RX_State(void)
{
return Dbg_Rx.State;
}
/******************************************************************************************************************************************
* 函数名称: Dbg_RX_Count()
* 功能说明: IOUART接收模块接收到的字符数
* 输 入: 无
* 输 出: uint32_t 接收到的字符个数
* 注意事