STM32 hal库DMA串口不定长

1.开启串口空闲中断
2.开启串口DMA接收
3.编写空闲中断函数,放入串口中断void USART1_IRQHandler(void)中
4.调用接收到的数据

用了两个方法,主要是缓存区定义的数组不同,其中例子可以直接下载

//切记切记要在实验板上测试,不能用软件仿真
//***方法1***--------------------------------------------
//main.c
uint8_t receive_buff[BUFFER_SIZE];

//usart.c
extern uint8_t receive_buff[BUFFER_SIZE];                                                //接收缓冲区
void MX_USART1_UART_Init(void)
{
    // ........
   __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
   HAL_UART_Receive_DMA(&huart1, (uint8_t*)receive_buff, BUFFER_SIZE);
}
/* USER CODE BEGIN 1 */
//只能接受BUFFER_SIZE-1个字符
void USAR_UART_IDLECallback(UART_HandleTypeDef *huart)
{
   
    HAL_UART_DMAStop(&huart1);
    i++;
    
    uint8_t data_length  = BUFFER_SIZE - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值