串口的时序就不再多讲了,主要是分享一个比自己写的IO模拟串口的实例
申明:
这个波特率为115200
分频系数为8
自动重载值为68
约等于8.7微秒
使用其他波特率或者IO口,只需要修改.h文件中的对应参数即可
头文件
#ifndef IO_UART_H
#define IO_UART_H
#include "tim.h"
enum
{
N_CMD, //空闲
W_CMD, //写
R_CMD, //读
F_CMD, //完成
};
enum
{
UNWAIT,
WAITING,
};
#define U_TIM TIM4 //UART内部定时器
#define TX_GPIO_PIN GPIO_PIN_15 //UART对应的TX引脚
#define RX_GPIO_PIN GPIO_PIN_14 //UART对应的RX引脚
#define TX_PIN 14 //UART对应的TX引脚编号
#define RX_PIN 15 //UART对应的RX引脚编号
#define TX_GPIO GPIOB //UART对应的TX端口
#define RX_GPIO GPIOB //UART对应的RX端口
#define MAX_WAIT 0x5 //最大等待时间
#define T_RELOAD 68 //发送一个字节所需的时间
#define T_FIRST 0x33 //延时到第一位的时间
#define MAX_BUFSIZE 3000 //收发最大字符数量
/************************************
function : 定时器中断回调函数
************************************/
void TIM_UART_Callback(TIM_HandleTypeDef *htim);
/************************************
function : 外部中断回调函数
************************************/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
/************************************
function : 发送一个字节
input : uint8_t send_data //要发送的字节
return : void
************************************/
void SEND_BYTE(uint8_t send_data);
/************************************
function : 发送一个字符串
input : uint8_t *send_data //要发送的字符串
return : void
************************************/
void SEND_STRING(uint8_t *send_data);
/*********


7434

被折叠的 条评论
为什么被折叠?



