ddllxxrr 发表于 2020-12-25 20:36

【NUCLEO-L452RE测评】+串口收到的数值给消息队例

<div class='showpostmsg'><p>接着上一程序,上一程序是这样,有两个任务一个发消息给消息队列,一个收消息队列并打印,同时串口接收中断。</p>

<p>那么这次我想再增加个消息队列,再增加个任务收串口来的消息,串口收到8个数据后传给消息队列。</p>

<p>&nbsp;</p>

<p>由于CMSIS_RTOS是对FREERTOS的封装,其有些函数都变了。优其消息队列的处理我觉得就很不一样。但我觉得CMSIS_RTOS简单,将来有钱途。所以就仍然用CMSIS_RTOS.</p>

<p>至于两者有何区别请看下边的文章:</p>

<p></p>

<p>&nbsp;</p>

<p>至于这次为什么增加一个队列,一个任务,我这么想地,操作系统之所以用它是给我解决问题地,那么我现在就是要三个任务一个中断,两个消息队列地跑。跑不起就说明不是个好系统。</p>

<p>&nbsp;</p>

<p></p>

<p>在串口中断完成回调函数里加入如下语句:</p>

<pre>
<code>/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        uint8_t i;
        HAL_UART_Transmit(&amp;huart2, uart2_rxbuf, 1, 100);    // 把收到的字节原样发送出去
        for(i=0;i&lt;8;i++)
        {
        osMessagePut(myQueue02Handle,uart2_rxbuf,osWaitForever);
        }
        HAL_UART_Receive_IT(&amp;huart2, uart2_rxbuf, 1);       // 重新注册一次,要不然下次收不到了
}
</code></pre>

<p>在新增任务里加入如下语句:</p>

<pre>
<code>void StartTask04(void const * argument)
{
/* USER CODE BEGIN StartTask04 */
        osEvent evt;
        uint8_t queue_buffer;
uint8_t queue_count;
       
        /* Infinite loop */
for(;;)
{
    evt = osMessageGet(myQueue02Handle,osWaitForever);
                if(queue_count &lt; 8)
                {
             queue_buffer = evt.value.v;
         ++queue_count;
      if(queue_count == 8)
      {
                                        printf("the message is trainslate...");
                                }                                       
                }
               
               
                osDelay(1);
}
/* USER CODE END StartTask04 */
}
</code></pre>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>断点打到printf那一行的前面。运行检查发送和接收的,正确!</p>

<p>我发的就是这个:01 03 00 01 00 02 00 11</p>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

okhxyyo 发表于 2020-12-28 11:00

<p><strong><a href="https://bbs.eeworld.com.cn/elecplay/content/148" target="_blank">ST NUCLEO-L452RE测评</a></strong></p>

<p>汇总贴:<a href="https://bbs.eeworld.com.cn/thread-1151850-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1151850-1-1.html&nbsp;</a>、</p>

freebsder 发表于 2020-12-29 22:36

<p>谢谢大佬分享,期待后续!</p>
页: [1]
查看完整版本: 【NUCLEO-L452RE测评】+串口收到的数值给消息队例