打印
[其他ST产品]

UART中斷接收與PWM控制問題

[复制链接]
271|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2022-7-22 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
你好:
  我想做一個使用UART接收資料,並搭配PWM控制馬達的應用。我UART是使用中斷接收的方式主要功能為:

   PWM初始化,
    if(當UART接收到感測器端發送出來的資料)
     {
         調整PWM數值我UART是使用中斷接收的方式
     }
    else
     {
        維持PWM初始值
     }

   目前我僅把UART中斷接收資料的功能完成,但PWM的部份怎麼實作我不了解。請問我是要把PWM控制的程式寫到main 裡面的while迴圈嗎?如果是的話,那我上面if else的判斷式要怎麼寫?能否給個簡單的範例?
以下是我目前HAL_UART_RxCpltCallback部份的程式碼

  • void HAL_UART_RxCpltCallback(UART_HandleTypeDef*UartHandle)
  • {
  •                 RxLine++;                      //每接收到一个数据,进入回调数据长度加1
  •             DataBuff[RxLine-1]=RxBuff[0];  //把每次接收到的数据保存到缓存数组
  •             if(DataBuff[RxLine-1]==0xff && DataBuff[RxLine-2]==0xff && DataBuff[RxLine-3]==0xff && DataBuff[RxLine-4]==0xff)            //接收结束标志位
  •             {
  •                        uint32_t Data_speed = (DataBuff[3] << 24 ) + (DataBuff[2] << 16) + (DataBuff[1] << 8) + (DataBuff[0]);  //資料重組(MSB/LSB轉換)
  •                        printf("Speed=%x\r\n",Data_speed);
  •                        float result= IEEE754_to_decimal(Data_speed);   //uint32 to float(IEEE_754)
  •                        printf("Speed=%f\r\n",result);
  •                        memset(DataBuff,0,sizeof(DataBuff));  //清空缓存数组
  •                        RxLine=0;  //清空接收长度
  •                }
  •             RxBuff[0]=0;
  •             HAL_UART_Receive_IT(&huart3, (uint8_t *)RxBuff, 1);

复制代码



使用特权

评论回复
沙发
kiwis66| | 2022-7-24 09:15 | 只看该作者
问题在哪?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1191

主题

5220

帖子

12

粉丝