STM32 HAL UART DMA 串口DMA输出到上位机

使用串口3.波特滤可以达到两百万波特,2000_000pbs,在使用正点原子高速无线下载器的情况下,完美使用。

1、CubeMX配置

配置好波特,打开DMA,打开中断就行

 

2、代码编写

创建缓存数组,高效率 重定义的串口DMA,串口中断函数的继续重定义编写(做保护)

//串口
unsigned char s_buf[]="hello world\r\n";//串口3专用数组

unsigned char RS232_UART1_s_buf[]="hello world\r\n";
unsigned char UART2_s_buf[]="hello world\r\n";
unsigned char UartTxBuf[250]; 
void Usart1Printf(const char *format,...)
{

    uint16_t len;
    va_list args;   
    va_start(args,format);
    len = vsnprintf((char*)UartTxBuf,sizeof(UartTxBuf)+1,(char*)format,args);
    va_end(args);
    HAL_UART_Transmit_DMA(&huart3, UartTxBuf, len);
}
 

/**
  * @brief This function handles USART1 global interrupt.
  */
void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
   unsigned int timeout=0;
  unsigned int maxDelay=0x1FFFF;
  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */
    timeout=0;
  while (HAL_UART_GetState(&huart1)!=HAL_UART_STATE_READY)//等待就绪
  {
    timeout++;//超时处理
    if(timeout>maxDelay) break; 
  }
     
  timeout=0;
  while(HAL_UART_Receive_IT(&huart1,(unsigned char *)aRxBuffer, 1)!=HAL_OK)//一次处理完成之后,重新开启中断并设置RxXferCount为1
  {
    timeout++; //超时处理
    if(timeout>maxDelay) break;	
  }
  /* USER CODE END USART1_IRQn 1 */
}

示例:

int ADC_value_buf[4];
void ADC3_Process(void)//已经准确获取电压
{
    HAL_ADC_Start_DMA(&hadc3,(uint32_t *)ADC3_Value,chanle3);
//     Usart1Printf("%d\r  %d\r  %d\r  %d\r\n",ADC3_Value[0],ADC3_Value[1],ADC3_Value[2],ADC3_Value[3]);

     //卡尔曼滤波
    ADC3_Value[0]= KalmanFilter1(ADC3_Value[0]);
    ADC3_4 =ADC3_Value[0]/ 4095.0f * 3.3f   ;

    ADC3_Value[1]= KalmanFilter2(ADC3_Value[1]);
    ADC3_3 =ADC3_Value[1]/ 4095.0f * 3.3f   ;

    ADC3_Value[2]= KalmanFilter3(ADC3_Value[2]);
    ADC3_2 =ADC3_Value[2]/ 4095.0f * 3.3f   ;

    ADC3_Value[3]= KalmanFilter4(ADC3_Value[3]);
    ADC3_1 =ADC3_Value[3]/ 4095.0f * 3.3f   ;
    
    Usart1Printf(" %.6f,%.6f,%.6f,%.6f\n",ADC3_4,ADC3_3,ADC3_2,ADC3_1);
    
}

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂北研猛男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值