摘要
本文概要介紹一個使用FreeRTOS之軟體計時器來操縱GPIO所連接之發光二極體的範例。
本文
FreeRTOS的介紹可以參考這裡。隨後將於STMicroelectronics的SPC5Studio整合開發環境來建立專案與應用程式,使用FreeRTOS之軟體計時器來操縱GPIO連接之發光二極體,並將建構完畢的應用程式燒錄至SPC582B-DIS開發板來進行驗證。
步驟1,使用預設的工作區載入SPC5Studio。
![](https://lh6.googleusercontent.com/OjDR8i9tklxGz6Lqp8R7Eqo9lHEj-QSLCokmZB1tD_9M-zyp0v84MCygNRFCLg51swblDFg_orpJAE2vHwgfikbwkoSMz3x7d78xJISv4Z9WHYo00cfQbwlo1WFSYEX-RPE_sM55)
步驟2,忽略許可證檢查。
![](https://lh3.googleusercontent.com/CEuOEkyRjbbdpcg2OzS89IyKU5LiBEPZDEkTLxc1_jx8wLIFgXyCkGDgWHGA85i0Tyjs9KMK5NwAbFRmrwnCOUQ2gXBbVBNaP2NyEm7nskq5I6NdL64IsV_pyZM86XzD2qwXRjhU)
步驟3,新建一個應用程式。
![](https://lh3.googleusercontent.com/AJTUlp3N3sStcugRLgYU4L1Ayk4zYbUL6dNvAZbLeHEaQwV0zpgvbC2xmwNbKH5MXNCmrX2CSmViEO_smcxNVhdRCkttFtePym9pO1M1tu68oRVrIICL5RjRBghntHEVKUQ12k8Y)
步驟4,指定專案名稱。
![](https://lh4.googleusercontent.com/8R93OIatLWlL5JB0fjn6H_b-4S1Cgo91ddnJ66NXgymQr9AA0cM3HMkvDRRdlTBNDL4nPeFi4PUeH0fNegSi2jbGsyvFRK_RM1S30ILixouPOinImkWp49iEOP4l7pZ8yokTTiu4)
步驟5,確認專案細節描述。
![](https://lh5.googleusercontent.com/ledBVpcpwJwqUfetfB0S_zwYu2TUHQk-LQGgcuApuZjrgubiI5f-HiOUnljzURs2A-iqmS7Cq4JhpmmSBKx6T_Qfw-9Fm5Op9tgnueqMkVVtCg9KZ1gxOqYIPuOgRz7uxSB7y_0t)
步驟6,確認預設的專案狀態。
![](https://lh4.googleusercontent.com/le3yPBD7kTYnJIM9EBHnoR6PCJ-oNa5GTXOkbzsh3MZgeSXo6bR_rpOA_AcSIeRyUwNYaGjf1lp_ds0RaDTfmcl4aneJGELXr8my2k1ULntr1mEw8wAoDuqltY9rBEvxkA33hoZP)
步驟7,添加平台零組件(platform component)。
![](https://lh6.googleusercontent.com/o3V8HXUcmgX3EJHDcAnnqmzf5GOL9ajbi4If50jAVuR_oF3-n9LKDTtsIAnJss0SinhzXYp9_E4-abZSUjfc0Qwo2spfrzR6B5s3hAbkxhggvJYJEtzJrjBqNXM1rmQn8HOuanZO)
![](https://lh6.googleusercontent.com/qSh1o-OeZBu4jSMnTjv1aOpdKj_hPrxFumpys1ax3VbtWkMsaS6JdTd-44IY8-lh64XvcGE-GXcWvRfCYSMWLOMqv2cEqLzCFTPebQfBdW1pCW3pTJibup7TG339J2xgoXCXoZ-E)
![](https://lh5.googleusercontent.com/u98aKY5r-Hj-jbnFSAXdZhHNn3OBIA_sZycqdWZb1gjdmz6oNi-RdH57jtMXcoIxfKgqBT22OTT-Ysb-u4LCXGgSmVOdv7iQzX4rKgiXnj7Nah2QruhKLQ1zwtYCNf7h1x53qY2W)
步驟8,添加初始化零組件(init package component)。
![](https://lh6.googleusercontent.com/CWLJMMdWAxR0VbwOLGKUEvgsiI49nLctvOMBq5b_UbIdZrbFDBSG_Vj3TafgHknblljBHeOV_ff4uzYAQd6G_4PdzKkS6mMmI2kBhXxhc-9SoWQt_6_k4LApRDBmWbUiQ9cBnO3c)
![](https://lh6.googleusercontent.com/zNftg5Hz24tbt-S9ZnDrsqf3SdmaGvHKSrFgumt-DBOVz_lQKygQAh7KByvjyf9QY1rDwbCb7PWnSfB461LSOfg8gUzUq9pMEb44sgYNk5EeJAgbdXppbL8lBBH9Tfy4r6gWM9o8)
![](https://lh6.googleusercontent.com/O9G-ZeNOhyhtqOmv2ECjk6TN8YHAYHsOQQIKnc20XKi5VelinV_pAILyaEWoeQHTEUoENhlX84NyosGLJKKY2f6Ds4uij0VbIMczruIdRT0zmGEYadBBDDDKeejuPETASuYCM5WK)
步驟9,添加FreeRTOS零組件(FreeRTOS component)。
![](https://lh6.googleusercontent.com/c-aAK5WKU51ehn-JaBmSwDSe1keb4HI7weYOHf8PnQMRwieLvn3rDLJzwkKa56cdKgT7awHUwk_pQ4D9JsqW45k3Fu_xyiAZkr9C5xdAJDi64dmn3Wx1Y5JO_6-McV3RQ1nE04hA)
![](https://lh6.googleusercontent.com/Q5zBPy95Ea34cWe69Cb2byHQK2u2oH_VGaTt2CN6Cj2ELBz8u1yIh63ZXw09R_Uw9GgbiOyYLjHT9LtwhyWdkPCawCRMU3QQzxeITXhGDIVQzIaYlxjEIAgHWIWPHupNICa54EU0)
步驟10,添加低階驅動程式零組件(low level drivers component)。
![](https://lh4.googleusercontent.com/feMj9ZZhryF3hJt37J9GOdQ14Dx9Xb0lFzmz9DBPoJQ0mQgemPHeiJAN7h6wWHyeVXyLkPhy6QF0elkvzgYhwWdK072Mk5djf1yKk6S1ONVs0_l0ntBqAC5JIfCzelT4DxpCZBZI)
步驟11,確認平台零組件(platform component)的設定;皆使用預設值。
![](https://lh3.googleusercontent.com/Mpk6xB7QdJqGnixEAqbwp9KosuGlD7Cd-mi2b2QaXeDq-lNgIGJaAZlgBtbXaqwPCXFi-wqD5dXJgwpFtx5SUyi8nM0pJoiGLOaUFPnxQhOSPrz1Kkn0zwgGEvPImKQbwIl84FH8)
![](https://lh6.googleusercontent.com/pH17pquuTqTBtC8y5nz40ulwbrtaibBTvgVZGcFKsbpDAo6x_AUkC5ImOj09LwjHWgvKmeWa165tdhF-nMtUlN8iN-afVeW7E0tnkyNBOEh9jVVtvbBOrqnFmEIO82DwaNwtxGqL)
![](https://lh5.googleusercontent.com/v4UOvKgiT18DAaLhrYeCHMpVz-ow6OoPprJ75MrDBIN3w2SvjkkDT8oHSfNRE8DZ92451gMp39zTUYlOIkLUyiI1L_QvXbgbHmk1rfMkU_ForT0Zd4PBK-EpU3DjP86PCAROnpFM)
![](https://lh4.googleusercontent.com/-GbvPfRqmzk5o8suqQDBwaCDiVLu_KjMXbhIunh2zIV9fM3JCRUf5ShCkL_ejnEsu8pGRoQkJhq2rXu-cqFIa_jz4y1AI4wujkXd5le_-ETOGD0dDJnpYhvqFch1zLtSV13MP1n0)
步驟12,於FreeRTOS零組件(FreeRTOS component)指定使用軟體計時器。
![](https://lh5.googleusercontent.com/CpEwWJG7bGnV_5CAG0w3U9DtYje6bX8xlWPeGt7FOCiCnFaNDJOPn7_PoVoTeiU0XShkE6NTw9L-PwO9kFdYdfRno_Wss0I_G6xc_b4ZzzS1eiVZps8G7fJBe0PADw5R8vvVzPBX)
步驟13,因應SPC582B-DIS開發板來設定連接發光二極體的3根GPIO。
![](https://lh4.googleusercontent.com/PH7uOWkIbdAE_2jGZ0fG9AXJMWNo_wLePu5NDH4HEYE-Mqst3bTjoFd3eFG-EaJGYwzl5aPtoJEGO7KzFNTpD3Je6Hz-U9x5PF5382Cy9w1ftwTEQpVXgv65CL6yvl0CgKLbwsps)
![](https://lh5.googleusercontent.com/_hqS7GOU7Os31jL4M4Dw1rPbuiYBeMxpP8Iw1Rp6sprGWuGQlAnuvMNLpSE4d_6YlLlLUon2LkQZ-jCgF4x8QCsv_3OM7upyMnpVr8LP6jd6orHz8owYaoI13EioNeHQShEKA8Tu)
![](https://lh5.googleusercontent.com/5aRwk4tM8JvNUGcv4Urc5dkBEqQS5MBCQe3jNutksT4QWvOyWllMHmXZ3p9mxnRwv-PuVFMSItQHb1bySnYwbhQDj6p0_zXoaIp3NIS5Knv3LowLDRq44xfDYQXm6aOL5I5SUhud)
![](https://lh4.googleusercontent.com/VaBBBqky1RNR3knORWDS_R4GdZ3XBK_GvvnIPBV6QPrkVyMQELlTo-9JGl4zu-mp6tMe1H2XfCjzFpU_CotMN_V7Z1s5ESVnqmlBdYBk-cf3G5IUTZ5Z0f2wo_4QNzTllUV7KPeB)
![](https://lh5.googleusercontent.com/1J4G8woc6itr1ETcqkkeEJdCE19_sT5bQO2OY8gY-O8Iv5ZaQ6jeftGgaUXJRgV92Xxef74mueUTz_Db7Y_Ul1FlWejOwBIcKoQMOH3zVgvtqeB7zZw--Awf0NNrjyAcfm8TFqMZ)
![](https://lh4.googleusercontent.com/85Tqpexx35EshKAmusPCoRm9EjmOyt85W7HyaMgYIH5NAhsevjsbG850pAmFmlTOnlutjr6O8Fj2pLgPKNJIMZeQiG6OKU17ZSjcALDaBIyhRFMCQEyhuWZ0K-gy-Wwz8s20ESM7)
步驟14,產生(generate)應用程式程式碼。
![](https://lh3.googleusercontent.com/viVFqSLJM1WujKPi0boG6HrJ3NmFmjyMw-NfyiMB_Lt3f2qqCZVU7ldt-VK-EpXNrvzMFXcEIfVulNHoJLnst-n6EqOzixfBPmgbbPTFupbedAga9G8Zrm28iG_sPxIYEvek8gp4)
![](https://lh3.googleusercontent.com/mdf-gF2DkRw9TYCCpSvvfRTXr-iQMeiqgfNn_ULgKkndzzMGo0vg8tj2DaMgKs3LHXi5JPcgZtlRApuJO2G3ALzRaad6ebwKtd1dD7kWVzwRpAbVlqXlXhQnkLyz0Wka7Ba4fCW-)
步驟15,編譯應用程式。
![](https://lh3.googleusercontent.com/K_LQ0pg8UbzJ_upau00niE-t2Dm4E4NNwoAywTSUS-Etf0tV4Rg9A4L-66P6SVkdB1EHdyYvTTp8kGtGZFOwFW_s_AEz8bKeBMhfAsjfHAJ9UqRlHQbErHofcvs6L9THb7YJL_ly)
步驟16,開啟UDE STK以便燒錄編譯完畢的應用程式。
![](https://lh5.googleusercontent.com/jQioeX5Nal2DN59hnAcT9yeZDSufhVrS9fIT5uhczU38VzbCq9By8RRi7G2Y7XazOTDwASVnbpMGNZ18CO7XPidGAD4YeJtsSG8_05WJTke-XWcwVREl3q_fE1mwI5VRLsfrKxRD)
![](https://lh3.googleusercontent.com/0XgMzWEhrH-e96ilGeHx4eZI6gtXVjmYGzwGKlNlf2Qq_pcmOYSzWxhihnr07a2rvkWjr7zP9bJWCI8lmz10PyQ1x9Z5zTQEp8lEmu-ZFa1T9-TQ7TkxFb37LM1X-OVAsogbqAca)
![](https://lh4.googleusercontent.com/t2ZrC8kB9ycFOmcCsJwDudg7vKjVGKxs_NZhu3q8mH8Q4z2WeLuhjxKHL8KHsW5PQ_PCEsULjQsqOGLhEm-Oy26avukd8Px5ZeFIajhXd2KNTf15pqloz31NpdtevNO3RwaLnKdm)
![](https://lh4.googleusercontent.com/Z0Ss3znsAEL8_KKiPlaUuX_6wLrBKnHCmhL65a8NyS2bK-SsMJMOnRY43TM5ShkuhcQQUi1DaCLegeb4O20D2d0QN2OnNuMyZXzOdm9_SmwHY25vVWlYLVKZ3Elq8AsDnhZE6VMW)
![](https://lh5.googleusercontent.com/OJjNliaKM_7yiDtkdhB3eW84leTRQz3YDGS2ObWXEViId_VkZDawGrHqm9-jz-HmQnVf7O63PIclFhaTZiZHBe4MexVswiGpEOdyBWZLPeLNWzMdlKOCiVGSwo8DbbIjqUjM96-a)
![](https://lh4.googleusercontent.com/yvyzKkS3pbBlNFLHwD71qqySMRsXQj6ZGklVudSNfUf-HnO0IPU_0Wr9U8osl8EIvh4gU1odX7k0U9eZue2gIvRPcHyf8lLuCbKb5WLxKwnFxyFWPPbQFx01liPRczq6-XdEyjhS)
![](https://lh3.googleusercontent.com/FkW523Nub9NJRPJ44oriPB-I-g6IP7Suluh2f4afmKPQACJu8bC86eZE2Fl7wxtg-C4Ndp0BLMxB028LArn303_znixmrqYGQgasSP8QN-qdZ-vjoYMZO93VGIP1VjwW_BAZniP6)
![](https://lh3.googleusercontent.com/ugnTN9VaBbMbkZ3kr9As8TLQ-1XRtILQj5uUHcXjwSDSp6R0-yTcvXde_40xPQ8N9Hw3CgMFhZC9vch5d0n5oviI8KxI7LYsK7mWgEazjEbytEtWDpgje4_Y_WsRZJEG4hdc0_7Q)
![](https://lh5.googleusercontent.com/QSPAjfq9EOd7mB9q0edOE9f3RHRxdCw6X16dz5sRm8kcb4RE9nlB2Z1ztBPOV8IcwzBh3l_utxRffIMlvfLxWS_0WLXLFzHnLSrbWibGA_2_vLug_EA_i4BtkhwnhbNbyD8x19eb)
![](https://lh5.googleusercontent.com/MOQuuyvpE0NbqjCGa-sPJg_6R6PxCBI1_HJp3U-L6x0DVfHUmHHbB0pSY6F6g3etfuANBBz4mkbegZX7ykTDXgZ_dpgXnYNwqKX8Wcd3LPj5i33HXg6D1yXfCnuFmT6copY9d6EN)
步驟17,確認3枚發光二極體已經點亮。
略過。
步驟18,參考這裡修改原始碼。
![](https://lh5.googleusercontent.com/0_hQIW6zfsXJNzgiX0t-jrtTtt6Hn87GIEpSLec0w4fuemBLd0phbYcX1qNH5ngR-aczeLSB0L36Y3M7SKEJcgFk0bXrWd2cN1NWfDfITFzXhti5BHrWeqaEgM9Wfw7VwkYpgVD9)
![](https://lh6.googleusercontent.com/CyCoSoyzjI7hPEMAiNZCxGelNUqot4KImmj0gy91HJTQWlYAKG0R0e6RAaGovK4T7yxW1rvXuvnvBVC2iM6GFmVVZAYKBEjU4k6raZj8ocHBMQ9TEDeUq8vPWrJbdUmbAdOuolo2)
藍字代表添加。
紅字代表移除。
#include "components.h" #include "FreeRTOS.h" #include "timers.h"
void prvOneShotTimerCallback(TimerHandle_t pxTimer) { pal_lld_togglepad(PORT_LD4_RED, LD4_RED); }
void prvAutoReloadTimerCallback(TimerHandle_t pxTimer) { pal_lld_togglepad(PORT_LD3_YELLOW, LD3_YELLOW); }
int main(void) { componentsInit(); TimerHandle_t xOneShotTimer = xTimerCreate( /* Text name for the software timer - not used by FreeRTOS. */ "OneShot", /* The software timer's period in ticks. */ 1, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */ pdFALSE, /* This example does not use the timer id. */ 0, /* The callback function to be used by the software timer being created. */ prvOneShotTimerCallback ); TimerHandle_t xAutoReloadTimer = xTimerCreate( /* Text name for the software timer - not used by FreeRTOS. */ "AutoReload", /* The software timer's period in ticks. */ 500, /* Setting uxAutoRealod to pdTRUE creates an auto-reload timer. */ pdTRUE, /* This example does not use the timer id. */ 0, /* The callback function to be used by the software timer being created. */ prvAutoReloadTimerCallback ); BaseType_t xTimer1Started = xTimerStart( xOneShotTimer, 0 ); BaseType_t xTimer2Started = xTimerStart( xAutoReloadTimer, 0 );
/* Start the FreeRTOS scheduler */ vTaskStartScheduler();
/* Application main loop.*/ /*for ( ; ; ) {
}*/ } |
接著,再次編譯及燒錄應用程式。
步驟19,確認SPC582B-DIS開發板上綠色發光二極點已點亮、紅色發光二極體已熄滅、而黃色發光二極體不斷閃爍。
![](https://lh4.googleusercontent.com/3lCpi90yId_BDFAVTiPMhf8WCkMrpiEOyBaHscWfzx5xeNk-Ul7rLIQC4v0CPlJSW3RW1Zh5i81sZQQI9Mt5NAlgNezGkkYZsYbVELiUTeK28SrfQC0oXnx--rzzongu08gHt7h5)
完成。
參考文獻
https://www.st.com/en/automotive-microcontrollers/spc582b60e1.html
https://www.st.com/en/evaluation-tools/spc582b-dis.html
https://www.st.com/content/ccc/resource/technical/document/user_manual/group0/bd/be/9b/d2/fa/e2/4d/b9/DM00365816/files/DM00365816.pdf/jcr:content/translations/en.DM00365816.pdf
https://www.st.com/en/development-tools/spc5-studio.html
https://www.cnblogs.com/FutureHardware/p/14240502.html
沒有留言:
張貼留言