添加了遥控器的离线检测和daemone的说明文档

This commit is contained in:
NeoZng
2023-01-04 21:26:11 +08:00
parent 48370d4411
commit 3db2a20a0e
14 changed files with 135 additions and 41 deletions

View File

@@ -7,4 +7,8 @@ BSP
> 2. 增加外部中断支持
> 3. 增加软件中断支持
> 4. 增加硬件CRC支持
> 5. 增加USB和虚拟串口支持
> 5. 增加USB和虚拟串口支持
bsp的功能是提供对片上外设的封装即单片机芯片内部拥有的功能的封装。在开发板pcb上集成的模块应该放在module层而不是这里。
bsp应该提供几种接口。包括初始化接口一般命名为`XXXRegister()`调用此模块实现的必要功能如通信型外设CubeMX下的connectivity提供接收和发送的接口以及接收完成的数据回调函数。

View File

@@ -4,6 +4,7 @@
/**
* @brief bsp层初始化统一入口,这里仅初始化必须的bsp组件,其他组件的初始化在各自的模块中进行
* 需在实时系统启动前调用,目前由RobotoInit()调用
*
*/
void BSPInit();

View File

@@ -57,6 +57,8 @@ void CANSetDLC(CANInstance *_instance, uint8_t length);
* @brief transmit mesg through CAN device,通过can实例发送消息
* 发送前需要向CAN实例的tx_buff写入发送数据
*
* @attention 超时时间不应该超过调用此函数的任务的周期,否则会导致任务阻塞
*
* @param timeout 超时时间,单位为ms;后续改为us,获得更精确的控制
* @param _instance* can instance owned by module
*/

View File

@@ -14,7 +14,6 @@ void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
if (pwm_instance[i]->callback) // 如果有回调函数
pwm_instance[i]->callback(pwm_instance[i]);
return; // 一次只能有一个通道的中断,所以直接返回
}
}
@@ -34,9 +33,9 @@ PWMInstance *PWMRegister(PWM_Init_Config_s *config)
pwm->pulse = config->pulse;
pwm->callback = config->callback;
pwm->id = config->id;
HAL_TIM_PWM_Start(pwm->htim, pwm->channel); // 启动PWM
__HAL_TIM_SetCompare(pwm->htim, pwm->channel, pwm->pulse); // 设置占空比,初始为0
// 启动PWM
HAL_TIM_PWM_Start(pwm->htim, pwm->channel);
__HAL_TIM_SetCompare(pwm->htim, pwm->channel, pwm->pulse); // 设置占空比
pwm_instance[idx++] = pwm;
return pwm;

View File

@@ -19,7 +19,9 @@ static USARTInstance *usart_instance[DEVICE_USART_CNT] = {NULL};
/**
* @brief usart service will start automatically, after each module registered
* 串口服务会在每个实例注册之后自动启用
*
* @todo 串口服务会在每个实例注册之后自动启用接收,当前实现为DMA接收,后续可能添加IT和BLOCKING接收
* 可能还要将此函数修改为extern,使得module可以控制串口的启停
*
* @param _instance instance owned by module,模块拥有的串口实例
*/
@@ -55,6 +57,23 @@ void USARTSend(USARTInstance *_instance, uint8_t *send_buf, uint16_t send_size)
HAL_UART_Transmit_DMA(_instance->usart_handle, send_buf, send_size);
}
void USARTAbort(USARTInstance *_instance, USART_TRANSFER_MODE mode)
{
switch (mode)
{
case USART_TRANSFER_TX:
// if(_instance.work_mode == USART_TX_DMA)
HAL_UART_AbortTransmit_IT(_instance->usart_handle);
break;
case USART_TRANSFER_RX:
// if(_instance.work_mode == USART_RX_DMA)
HAL_UART_AbortReceive_IT(_instance->usart_handle);
break;
case USART_TRANSFER_NONE:
break;
}
}
/**
* @brief 每次dma/idle中断发生时都会调用此函数.对于每个uart实例会调用对应的回调进行进一步的处理
* 例如:视觉协议解析/遥控器解析/裁判系统解析

View File

@@ -10,6 +10,13 @@
// 模块回调函数,用于解析协议
typedef void (*usart_module_callback)();
typedef enum
{
USART_TRANSFER_NONE=0,
USART_TRANSFER_TX,
USART_TRANSFER_RX,
} USART_TRANSFER_MODE;
// 串口实例结构体,每个module都要包含一个实例
typedef struct
{
@@ -36,6 +43,7 @@ USARTInstance *USARTRegister(USART_Init_Config_s *init_config);
/**
* @brief 通过调用该函数可以发送一帧数据,需要传入一个usart实例,发送buff以及这一帧的长度
* 当前默认为DMA发送,后续会增加中断发送和阻塞发送模式的选择
*
* @param _instance 串口实例
* @param send_buf 待发送数据的buffer
@@ -43,4 +51,12 @@ USARTInstance *USARTRegister(USART_Init_Config_s *init_config);
*/
void USARTSend(USARTInstance *_instance, uint8_t *send_buf, uint16_t send_size);
/**
* @brief 通过调用该函数终止串口的发送或者接收,通过传入mode参数来选择终止发送还是接收
*
* @param _instance 串口实例
* @param mode 选择终止发送还是接收的模式
*/
void USARTAbort(USARTInstance *_instance,USART_TRANSFER_MODE mode);
#endif