2609 发表于 2024-3-2 16:26

【ST NUCLEO-U5A5ZJ-Q开发板测评】7移植FreeRtos

<div class='showpostmsg'><div style="text-align: center;">
<div style="text-align: left;">前言:由于在网上没有找到齐全的资料关于我在测评计划内原先计划的测评任务,软硬件I2C读写MCP6050,软硬件SPI读写W25Q64等几个任务相继宣告失败,加上前端时间嗓子吞刀片发烧挂水休息了几天,看着所剩无几的时间,我决定换个方向,本文来移植一下操作系统。</div>

<div style="text-align: left;"><span style="font-size: 24px;"><b>1.工程配置铺垫</b></span></div>

<div style="text-align: left;">1)芯片选择,创建工程选择withoutTrustZone,开启ICACHE,配置PWR操作</div>

<div style="text-align: left;">2)开启时钟晶振,时钟树配置如图</div>

<div style="text-align: center;">
<div style="text-align: center;"></div>

<div style="text-align: center;"></div>

<div style="text-align: left;">3)系统时钟源选择除系统时钟的任意一个,本文选择TIM2作为时钟源,因为FreeRTOS会占用系统时钟。</div>

<div style="text-align: left;">&nbsp;</div>

<div style="text-align: center;">
<div style="text-align: center;">
<div style="text-align: center;">
<p></p>

<p style="text-align: left;">4)配置GPIO口,选择三个用户LED,均设置为output,引脚使用情况如图</p>

<div style="text-align: center;"></div>

<div style="text-align: center;"></div>

<div style="text-align: left;"><span style="font-size:24px;"><strong>2.开始移植FreeRtos</strong></span></div>

<div style="text-align: left;">1)下载官方移植包,选择图中的版本即可
<div style="text-align: center;"></div>

<p>&nbsp;</p>
</div>

<p>&nbsp;</p>
</div>

<div style="text-align: center;">
<p></p>

<p style="text-align: left;">2)设置,下载好了设置一下core和heap</p>

<div style="text-align: center;"></div>

<div style="text-align: center;"></div>

<div style="text-align: center;"></div>

<div style="text-align: left;">3)添加任务,这里我添加了2个任务(默认配置就行),系统自动生成了一个任务,总共是三个,在Task and Queues中双击默认的任务,系统自动生成了一个名为defaultTask的任务,优先级为osPriorityNormal,占空间大小128words,任务的函数名为StartDefaultTask。</div>

<div style="text-align: center;">
<div style="text-align: center;"></div>

<div style="text-align: left;">4)生成工程</div>

<div style="text-align: center;">
<div style="text-align: center;"></div>

<div style="text-align: center;"></div>

<div style="text-align: left;"><strong><span style="font-size:24px;">3.代码</span></strong></div>

<div style="text-align: left;">1)工程目录,找到app_freertos.c,进入。翻到下面的任务沙箱,随即开始后续的代码添加</div>

<p>&nbsp;</p>
</div>

<p>&nbsp;</p>
</div>

<div style="text-align: center;"></div>

<div style="text-align: left;">2)添加任务代码</div>

<div style="text-align: left;">
<p>这里我们创建三个led灯延时点亮的任务,我们知道在裸机开发时候这个用延时实现是冲突的,在FREERTOS系统中我们可以创建三个任务,互不干扰。</p>

<p>分别在/* USER CODE END Header_StartDefaultTask */</p>

<p>/* USER CODE END Header_StartTask02 */</p>

<p>/* USER CODE END Header_StartTask03 */</p>

<p>沙箱内</p>

<pre>
<code class="language-cpp">void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN defaultTask */
/* Infinite loop */
for(;;)
{
          HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_7);//LED2
                  osDelay(500);                //延时500个时钟节拍

}
/* USER CODE END defaultTask */
}</code></pre>

<pre>
<code class="language-cpp">void StartTask02(void *argument)
{
/* USER CODE BEGIN myTask02 */
/* Infinite loop */
for(;;)
{
          HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_7);//LED1
                  osDelay(700);                //延时700个时钟节拍

}
/* USER CODE END myTask02 */
}</code></pre>

<pre>
<code class="language-cpp">void StartTask03(void *argument)
{
/* USER CODE BEGIN myTask03 */
/* Infinite loop */
for(;;)
{
          HAL_GPIO_TogglePin(GPIOG,GPIO_PIN_2);//LED3
                  osDelay(1000);                //延时1000个时钟节拍

}
/* USER CODE END myTask03 */
}</code></pre>

<p><strong><span style="font-size:24px;">效果</span></strong></p>

<p>e2bca1a9722da428e0098cc087175dd0<br />
总结:stm32系列发展到u5系列这里已经是比较成熟了,系统的移植相比于其他型号的板子来说便捷的多,还得益于完善的软件生态,此次freertos的移植可以说是一键移植,没有裁剪内核添加删除.h文件等等一系列复杂的操作,任务的创建也是轻松至极,体验非常棒!</p>

<div>工程附件:</div>
</div>
</div>

<p>&nbsp;</p>
</div>

<p>&nbsp;</p>
</div>

<p>&nbsp;</p>
</div>

<p>&nbsp;</p>
</div>

<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>

Jacktang 发表于 2024-3-2 20:45

<p>软硬件SPI读写W25Q64等几个任务相继宣告失败,加上前端时间<strong>嗓子吞刀片发烧挂水</strong>休息了几天,</p>

<p>哈哈</p>

2609 发表于 2024-3-3 00:28

Jacktang 发表于 2024-3-2 20:45
软硬件SPI读写W25Q64等几个任务相继宣告失败,加上前端时间嗓子吞刀片发烧挂水休息了几天,

哈哈

<p>太痛苦啦</p>

lugl4313820 发表于 2024-3-3 09:03

Jacktang 发表于 2024-3-2 20:45
软硬件SPI读写W25Q64等几个任务相继宣告失败,加上前端时间嗓子吞刀片发烧挂水休息了几天,

哈哈

<p>我是驱动MCU屏失败,痛苦一个星期了。</p>

2609 发表于 2024-3-4 00:21

lugl4313820 发表于 2024-3-3 09:03
我是驱动MCU屏失败,痛苦一个星期了。

<p>大佬技术遥遥领先,即使失败还是奉献了那么多优秀的测评~</p>
页: [1]
查看完整版本: 【ST NUCLEO-U5A5ZJ-Q开发板测评】7移植FreeRtos