历史上的今天
今天是:2025年01月06日(星期一)
2020年01月06日 | stm32 hal库不定长接收数据
2020-01-06 来源:eefocus
使用 IDLE 中断接收,稍微修改了hal库,但是都是在begin end中修改,重新在cube中生成代码不会去掉这部分内容,不见原理,原理部分请参考编程手册,只讲做法。
1.在stm32f4xx_it,c中修改
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
uint32_t isrflags = READ_REG(huart1.Instance->SR);
uint32_t cr1its = READ_REG(huart1.Instance->CR1);
if(((isrflags & USART_SR_IDLE) != RESET) && ((cr1its & USART_CR1_IDLEIE)))
{
HAL_UART_IDLECallback(&huart1);
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
huart1.RxState = HAL_UART_STATE_READY;
}
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
2.在生成的uart.c文件加入,并且在.h中声明
__weak void HAL_UART_IDLECallback(UART_HandleTypeDef *huart)
{
(void)huart;
}
3.在应用程序中使能IDLE中断
void task1_Fxn(void *p)
{
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
status = HAL_UART_Receive_DMA(&huart1,uart_buffer,100);
while(1)
{
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);
vTaskSuspend(NULL);
//在这里添加接收到串口数据的处理
HAL_UART_AbortReceive(&huart1);
HAL_UART_Receive_DMA(&huart1,uart_buffer,100);
}
}
4.IDLE回调函数
void HAL_UART_IDLECallback(UART_HandleTypeDef *huart)
{
xTaskResumeFromISR(task1Handle);
}
史海拾趣
|
遥控器用的红外LED,因为红外LED发出的光不完全是红外光,也包含部分的可见光(红色)成分,所以肉眼能看到少许光。遥控器使用的LED,一般发射角度是30度左右,用户即使没有完全对准目标,也能有效操作。在没有外界红外线干扰的时候,遥控距离可以 ...… 查看全部问答> |
|
在wince 6.0中我有一个客户端程序,先后两次调用InitializeSecurityContext用于和google服务器端进行安全认证,第一次调用返回的是SEC_I_CONTINUE_NEEDED,第二次返回的是SEC_E_WRONG_PRINCIPAL,请问怎么解决啊?是不是和证书有关系?相同程序在wi ...… 查看全部问答> |
|
各位有需要电子元件的请和我联系,库存商品优惠啦!:D 小店欢迎您的光临 石家庄傲尔科技有限公司是一家专注于国外中小电子工程分包商,经过多年的发展,我公司与国际大的元件供应商如MOUSER, DIGIKEY建立了稳定的合作。 我们的优势:1. 保证 ...… 查看全部问答> |
|
void main(){ init_serialcom(); //步进电机不能有这个函数,这是一个初始化串口的函数, ATE0(); //步进电机也不能有这个函数,这是个向串口发送AT指令的函数。 为什么去掉这前两个函 ...… 查看全部问答> |
|
u8 sd_raw_get_info(struct sd_raw_info* info)中struct怎么理解 u8 sd_raw_get_info(struct sd_raw_info* info) { …… } 这个子程序怎么用啊,像u8 mmcWrite(u32 sector, u8* buffer)这种,我在主程序中只要定义unsigned char SD_Write1[]={\"0123456789\"}; 就可以用了mmcWrite(SD_Write1); 但是这个定义 ...… 查看全部问答> |
|
SD24的SD24CCTLx寄存器 SD24GRP 位 SD24_A group. Groups SD24_A channel with next higher channel. Not used for the last channel. 如何使用该位?… 查看全部问答> |




