串口接收+发送

本实验基于野火开发板stm32f407及stm32cubemx、keil环境实现。

串口使用的串口1,PA9、PA10

基本配置

模式:异步

添加接收端DMA

使能串口中断

生成代码后

uint8_t RX_BUF[RX_LEN];  //自定义一个数组,使用dma接收存储

找到stm32f4xx_it.c

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
	if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET){    //判断IDLE是否被置位
		__HAL_UART_CLEAR_IDLEFLAG(&huart1);    //被置位就是接收到数据
		HAL_UART_DMAStop(&huart1);
		printf("%s\r\n",RX_BUF);
		HAL_UART_Receive_DMA(&huart1,RX_BUF,RX_LEN);
	}
  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */
}

 使能IDLE中断和打开串口DMA接收使用在main函数里,while前,可以避免第一次接受全为0x00,或者使用在初始化函数内

	 __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); //开启串口空闲中断,当时没有数据的时候中断
    HAL_UART_Receive_DMA(&huart1, RX_BUF, RX_LEN);//开启串口DMA接收
 

串口重定向

int fputc(int ch, FILE *f)
{     
    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕  
    USART1->DR = (unsigned char)ch;     
    return ch;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值