sentry_gimbal_hzz/bsp/usart/bsp_usart.h

63 lines
2.0 KiB
C
Raw Normal View History

2022-10-20 17:13:02 +08:00
#ifndef BSP_RC_H
#define BSP_RC_H
2022-12-12 22:29:51 +08:00
#include <stdint.h>
2022-10-20 17:13:02 +08:00
#include "main.h"
2022-11-01 22:32:15 +08:00
#define DEVICE_USART_CNT 3 // C板至多分配3个串口
2023-01-01 17:32:22 +08:00
#define USART_RXBUFF_LIMIT 256 // 如果协议需要更大的buff,请修改这里
2022-10-20 17:13:02 +08:00
2023-01-01 17:32:22 +08:00
// 模块回调函数,用于解析协议
2022-10-20 17:13:02 +08:00
typedef void (*usart_module_callback)();
typedef enum
{
USART_TRANSFER_NONE=0,
USART_TRANSFER_TX,
USART_TRANSFER_RX,
} USART_TRANSFER_MODE;
2023-01-01 17:32:22 +08:00
// 串口实例结构体,每个module都要包含一个实例
2022-10-20 17:13:02 +08:00
typedef struct
{
2022-11-01 22:32:15 +08:00
uint8_t recv_buff[USART_RXBUFF_LIMIT]; // 预先定义的最大buff大小,如果太小请修改USART_RXBUFF_LIMIT
uint8_t recv_buff_size; // 模块接收一包数据的大小
UART_HandleTypeDef *usart_handle; // 实例对应的usart_handle
usart_module_callback module_callback; // 解析收到的数据的回调函数
} USARTInstance;
2022-10-20 17:13:02 +08:00
/* usart 初始化配置结构体 */
typedef struct
{
uint8_t recv_buff_size; // 模块接收一包数据的大小
UART_HandleTypeDef *usart_handle; // 实例对应的usart_handle
usart_module_callback module_callback; // 解析收到的数据的回调函数
} USART_Init_Config_s;
2022-10-20 17:13:02 +08:00
/**
2022-11-01 22:32:15 +08:00
* @brief .
2022-10-20 17:13:02 +08:00
*
* @param init_config
2022-10-20 17:13:02 +08:00
*/
USARTInstance *USARTRegister(USART_Init_Config_s *init_config);
2022-10-20 17:13:02 +08:00
/**
2023-01-01 17:32:22 +08:00
* @brief ,usart实例,buff以及这一帧的长度
* DMA发送,
2022-11-01 22:32:15 +08:00
*
2023-01-01 17:32:22 +08:00
* @param _instance
* @param send_buf buffer
2022-10-20 17:13:02 +08:00
* @param send_size how many bytes to send
*/
void USARTSend(USARTInstance *_instance, uint8_t *send_buf, uint16_t send_size);
2022-10-20 17:13:02 +08:00
/**
* @brief ,mode参数来选择终止发送还是接收
*
* @param _instance
* @param mode
*/
void USARTAbort(USARTInstance *_instance,USART_TRANSFER_MODE mode);
2022-10-20 17:13:02 +08:00
#endif