日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

不服跑個分!5塊錢的國產(chǎn)單片機—Air32移植LVGL+FreeRTOS

合宙LuatOS ? 2022-08-28 15:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1ee754d6-2560-11ed-9ade-dac502259ad0.png

合宙Air32F103系列MCU自六月初量產(chǎn)上市以來,以優(yōu)異性能和極致低價受到廣大用戶好評。特別是Air32F103CCT6芯片,64K RAM+256K Flash,可滿足許多復(fù)雜應(yīng)用需求。

最近LuatOS社區(qū)大神@Principle,在Air32F103CCT6上移植LVGL+FreeRTOS并進行了跑分測試,我們一起來看看吧~

1f03e218-2560-11ed-9ade-dac502259ad0.gif

-合宙Air32跑分實測 -

文末【閱讀原文】鏈接,獲取最新資料。

1

合宙Air32芯片選型


合宙Air32系列芯片有不同容量型號可選,我選擇了QFP48封裝所能提供最大存儲容量的Air32F103CCT6。

合宙LuatOS淘寶直營店

luat.taobao.com

1f0f797a-2560-11ed-9ade-dac502259ad0.png

Air32F103CCT6芯片相對于STM32F103大容量型號,主要有以下幾個升級點:

●216MHz的Cortex-M3內(nèi)核

可以穩(wěn)定超頻運行在256MHz,且運行在216MHz下時,全部Flash區(qū)域僅需1個等待周期。

●新增了一些外設(shè)
包括ADC3/TRNG/TIM9-TIM14等;

●對現(xiàn)有外設(shè)進行了增強

例如內(nèi)置USB上拉電阻、GPIO可以獨立上下拉等。

2

移植FreeRTOS與LVGL


由于合宙Air32系列能夠兼容STM32,因此本代碼基于STM32F1的標準庫,并增加了Air32的專有代碼。

Air32F103最新LVGL+FreeRTOS示例工程:
https://yuanze.wang/posts/air32-lvgl-freertos/

本工程針對Air32F103CCT6芯片,使用硬件SPI+DMA的方式驅(qū)動GC9306X控制器的320x240LCD屏幕,并支持雙緩沖模式,幾乎榨干了Air32所有的性能。同時,使用RTOS保證了DMA傳輸過程中CPU能夠進入休眠,降低系統(tǒng)功耗。

特別注意:

請使用較新版本的Keil,舊版Keil可能會出現(xiàn)編譯的程序運行錯誤問題。

本工程經(jīng)實測可使用Keil5.36正常編譯。

1f03e218-2560-11ed-9ade-dac502259ad0.gif

2.1 工程組件


本文所使用的工程組件均來自原汁原味的官方最新版,除了配置文件之外絕無任何魔改。

● FreeRTOS:

來自FreeRTOS官網(wǎng)中最新的LTS 202012.04版本。
https://www.freertos.org/a00104.html

● LVGL:來自官網(wǎng)LVGL官方GitHub倉庫中最新的LVGL 8.3.1版本。
https://github.com/lvgl/lvgl/releases

2.2 注意事項


● 中斷優(yōu)先級:

Air32的NVIC中斷優(yōu)先級只有3位,而不是STM32的4位。若想使用STM32的標準庫,則需要在FreeRTOSConfig.h頭文件中修改__NVIC_PRIO_BITS默認的值。

C

#ifndef __FREERTOS_CONFIG_H

#define __FREERTOS_CONFIG_H

#include "stm32f10x.h"

#undef __NVIC_PRIO_BITS

#define __NVIC_PRIO_BITS 3

● Air32專用PLL庫:

需要來自合宙的閉源PLL庫。為此,我將STM32原版的system_stm32f10x.c排除編譯,然后實現(xiàn)了自己的SystemInit()函數(shù)。該函數(shù)可以從合宙官方的SDK中獲取。

▼上下滾動,查看全部▼

C

voidSystemInit(void)

{

RCC_DeInit(); //復(fù)位RCC寄存器

RCC_HSEConfig(RCC_HSE_ON); //使能HSE

while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待HSE就緒

RCC_PLLCmd(DISABLE);//關(guān)閉PLL

AIR_RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_32, 1); //配置PLL, 8*32=256MHz

RCC_PLLCmd(ENABLE); //使能PLL

while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待PLL就緒

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //選擇PLL作為系統(tǒng)時鐘

RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置AHB時鐘

RCC_PCLK1Config(RCC_HCLK_Div2);//配置APB1時鐘

RCC_PCLK2Config(RCC_HCLK_Div1);//配置APB2時鐘

RCC_LSICmd(ENABLE); //使能內(nèi)部低速時鐘

while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET); //等待LSI就緒

RCC_HSICmd(ENABLE); //使能內(nèi)部高速時鐘

while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); //等待HSI就緒

}

然后,將air.lib加入工程中,并自己定義AIR_RCC_PLLConfig()函數(shù)的原型與SystemCoreClock的值。

合宙Air32支持比STM32標準庫更高的RCC_PLLMul_xx值,因此還需要將air32f10x.h中新增的PLL值復(fù)制到自己的代碼中,這樣可以在使用熟悉的STM32標準庫的同時,使用到Air32的增強功能。

▼上下滾動,查看全部▼

C

#define RCC_PLLMul_17 ((uint32_t)0x10000000)

#define RCC_PLLMul_18 ((uint32_t)0x10040000)

#define RCC_PLLMul_19 ((uint32_t)0x10080000)

#define RCC_PLLMul_20 ((uint32_t)0x100C0000)

#define RCC_PLLMul_21 ((uint32_t)0x10100000)

#define RCC_PLLMul_22 ((uint32_t)0x10140000)

#define RCC_PLLMul_23 ((uint32_t)0x10180000)

#define RCC_PLLMul_24 ((uint32_t)0x101C0000)

#define RCC_PLLMul_25 ((uint32_t)0x10200000)

#define RCC_PLLMul_26 ((uint32_t)0x10240000)

#define RCC_PLLMul_27 ((uint32_t)0x10280000)

#define RCC_PLLMul_28 ((uint32_t)0x102C0000)

#define RCC_PLLMul_29 ((uint32_t)0x10300000)

#define RCC_PLLMul_30 ((uint32_t)0x10340000)

#define RCC_PLLMul_31 ((uint32_t)0x10380000)

#define RCC_PLLMul_32 ((uint32_t)0x103C0000)

uint32_t SystemCoreClock = 256000000;

uint32_t AIR_RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul, uint8_t Latency);

注意:
如需使用Air32相比STM32新增的外設(shè)中斷,請自行更換STM32的啟動文件到Air32的啟動文件。

● Keil編譯器設(shè)置:

LVGL需要最低支持C99的編譯器才能正確編譯,因此需要開啟Keil AC5的C99模式。同時,為了減少生成固件的體積,建議選擇最高級別的-O3優(yōu)化。

2.3 組件庫的裁剪與優(yōu)化


由于芯片的RAM空間有限,因此需要對芯片的RAM空間進行一定的規(guī)劃與優(yōu)化。程序中占用RAM較大的部分與相應(yīng)的規(guī)劃如下:

● 系統(tǒng)棧:

由于使用了FreeRTOS,各個Task有其自己的任務(wù)棧,因此系統(tǒng)棧只有ISR與main函數(shù)使用。

因此,在startup_stm32f10x_hd.s中將Stack_Size改為0x00000100,即256字節(jié)。

● 任務(wù)棧:

目前的代碼中只有三個Task,分別是LVGL Task LED Task與IDLE Task。

其中,LED Task與IDLE Task都非常簡單,為它們設(shè)置128字節(jié)的任務(wù)棧;LVGL Task較為復(fù)雜,根據(jù)官方推薦的2-8K范圍,設(shè)置為4K。

● LVGL堆:

LVGL的所有句柄都是動態(tài)內(nèi)存,因此其自己維護了一個堆空間。堆空間的大小可以在lv_conf.h中的LV_MEM_SIZE中修改,您可以根據(jù)自己使用的UI復(fù)雜度對其進行修改。對于benchmark demo,12K即可滿足要求。

● LVGL緩沖區(qū):

LVGL需要將畫面渲染到緩沖區(qū)中,之后再刷新到屏幕上。本工程支持單緩沖與雙緩沖模式(可以在Keil的Target中選擇),單緩沖模式使用1個240x40像素的緩沖區(qū),雙緩沖模式則使用2個240x40像素的緩沖區(qū)。使用雙緩沖模式可以在DMA控制器向屏幕寫入一個緩沖區(qū)的數(shù)據(jù)時,CPU繼續(xù)渲染到另一個緩沖區(qū)中,提升渲染效率,但會占用雙倍的緩沖區(qū)。

同時,由于芯片的ROM空間也有限,因此我裁剪了一些LVGL與FreeRTOS的功能。您可以在lv_conf.h與FreeRTOSConfig.h中自行開關(guān)它們。benchmarkdemo中包含了大量的字體與圖像,因此導(dǎo)致最終編譯生成的bin文件較大。只使用FreeRTOS與LVGL內(nèi)核時,ROM占用約120K。使用常用的控件后,還能剩余約100K空間給用戶開發(fā)自己的應(yīng)用。

3

運行效果及總結(jié)


接下來通過單緩沖模式及雙緩沖模式實測數(shù)據(jù),看看整體運行效果如何:

3.1 單緩沖模式


單緩沖模式的存儲空間占用情況如下:

C

Total RO Size (Code + RO Data) 230904 ( 225.49kB)

Total RW Size (RW Data + ZI Data) 40768 ( 39.81kB)

Total ROM Size (Code + RO Data + RW Data) 231472 ( 226.05kB)

單緩沖模式跑分結(jié)果:

1f2e5322-2560-11ed-9ade-dac502259ad0.jpg

3.2雙緩沖模式


雙緩沖模式的存儲空間占用情況如下:

C

Total RO Size (Code + RO Data) 230904 ( 225.49kB)

Total RW Size (RW Data + ZI Data) 40768 ( 39.81kB)

Total ROM Size (Code + RO Data + RW Data) 231472 ( 226.05kB)

雙緩沖模式跑分結(jié)果:

1f3fa1c2-2560-11ed-9ade-dac502259ad0.jpg

可以看出,單緩沖模式相比雙緩沖模式節(jié)約了大量的RAM,幀數(shù)卻只下降了25%,因此單緩沖模式更具有實用意義。這主要是因為,在復(fù)雜UI界面下,瓶頸主要在CPU的運算速度上,而不是向屏幕寫入緩沖區(qū)的IO操作上。

● 實測總結(jié):

5元錢的Air32F103CCT6確實具有了流暢運行LVGL的能力,并且還有100K左右的ROM和超過20K的RAM空間可用,這使得在Air32F103上使用LVGL+FreeRTOS的同時開發(fā)復(fù)雜的用戶程序成為了可能,我們又多了一個高性價比的國產(chǎn)MCU選擇。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(guān)注

    關(guān)注

    6078

    文章

    45596

    瀏覽量

    674082
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    國產(chǎn)替代STM32F103CBT6的32位MCU單片機參考方案

    針對STM32F103CBT6等MCU單片機長期存在的供應(yīng)波動、價格上調(diào)及供應(yīng)鏈不確定性,英尚為電子推出基于國產(chǎn)自主架構(gòu)的32位MCU替代方案。英尚的32位MCU以軟件全兼容為核心設(shè)計目標,實現(xiàn)零改
    的頭像 發(fā)表于 04-23 16:17 ?152次閱讀
    <b class='flag-5'>國產(chǎn)</b>替代STM32F103CBT6的32位MCU<b class='flag-5'>單片機</b>參考方案

    單片機物聯(lián)網(wǎng)項目實戰(zhàn):基于LVGL的智能火災(zāi)報警系統(tǒng)-基于STM32F103&amp;amp;ESP32-S3開發(fā)板(附教程/源碼)

    (初級)到RTOS實時操作系統(tǒng)(中級),再到LVGL圖形界面設(shè)計與AIoT物聯(lián)網(wǎng)應(yīng)用(高級)的完整技能進階路線及學習資料,無論是作為單片機與物聯(lián)網(wǎng)方向的綜合項目練
    的頭像 發(fā)表于 02-11 16:11 ?626次閱讀
    <b class='flag-5'>單片機</b>物聯(lián)網(wǎng)項目實戰(zhàn):基于<b class='flag-5'>LVGL</b>的智能火災(zāi)報警系統(tǒng)-基于STM32F103&amp;amp;ESP32-S3開發(fā)板(附教程/源碼)

    單片機物聯(lián)網(wǎng)項目實戰(zhàn):基于LVGL的智慧大棚農(nóng)業(yè)系統(tǒng)-基于STM32F103&amp;amp;ESP32-S3開發(fā)板(附教程/源碼)

    (初級)到RTOS實時操作系統(tǒng)(中級),再到LVGL圖形界面設(shè)計與AIoT物聯(lián)網(wǎng)應(yīng)用(高級)的完整技能進階路線及學習資料,無論是作為單片機與物聯(lián)網(wǎng)方向的綜合項目練
    的頭像 發(fā)表于 02-11 15:50 ?431次閱讀
    <b class='flag-5'>單片機</b>物聯(lián)網(wǎng)項目實戰(zhàn):基于<b class='flag-5'>LVGL</b>的智慧大棚農(nóng)業(yè)系統(tǒng)-基于STM32F103&amp;amp;ESP32-S3開發(fā)板(附教程/源碼)

    單片機程序飛死機的幾種原因分享

    時間主動報錯退出。 4、堆棧溢出 常見于容量小的單片機,重復(fù)中斷、函數(shù)調(diào)用導(dǎo)致超出堆??臻g,正常數(shù)據(jù)被改寫。該問題最難查,有一定特殊性,很難穩(wěn)定復(fù)現(xiàn) 5、中斷異常 打開了某個中斷但是沒有編寫中斷
    發(fā)表于 01-21 07:34

    單片機里的程序運行方式

    :8051單片機有一全雙工的串行口,可實現(xiàn)單片機單片機或其他設(shè)備間的串行通信。 中斷控制系統(tǒng):8051共有5
    發(fā)表于 01-16 06:57

    學習單片機快速方法

    。 然后我們談實踐,花100來塊錢單片機學習板,有做板經(jīng)驗的也可以自己做一,原理圖網(wǎng)上多得是。不要買太貴的單片機板,其實學習階段很多
    發(fā)表于 01-14 07:42

    怎么學好單片機?

    的一些接口可用,也就是說,需要架一簡單的前后臺系統(tǒng),只會寫應(yīng)用軟件,就比較難使用單片機,因為他們對這些只有硬件,沒有軟件接口的東西,無從下手。 所以,學單片機,首先學會硬件,也就是簡單的電阻電容電感
    發(fā)表于 12-04 07:16

    單片機:一承載科技與工程思維的核心平臺

    ,還是工業(yè)自動化、嵌入式系統(tǒng),單片機都扮演著不可或缺的角色。它不僅僅是一芯片,而是承載著技術(shù)與工程思維的核心平臺,其重要性不言而喻。 一、單片機的核心要素 單片機的核心要素主要包括以
    的頭像 發(fā)表于 09-29 01:07 ?730次閱讀

    【RA-Eco-RA6M4開發(fā)板評測】移植LVGL

    開發(fā)板評測】驅(qū)動ST7796LCD屏 - 瑞薩單片機論壇 - 電子技術(shù)論壇 - 廣受歡迎的專業(yè)電子論壇! 【lvgl安裝包】*附件:LVGL.lvgl.8.3.10.pack.zip 下載后直接安裝即可
    發(fā)表于 08-05 12:38

    怎么測單片機系統(tǒng)頻率

    單片機系統(tǒng)頻率是指單片機工作時的時鐘頻率,它直接影響單片機的運行速度和處理能力,準確測量系統(tǒng)頻率對單片機應(yīng)用開發(fā)、程序調(diào)試和性能優(yōu)化具有重要意義。測量
    的頭像 發(fā)表于 07-25 11:39 ?1108次閱讀

    單片機怎么驅(qū)動電機?

    在各類自動化設(shè)備和智能裝置中,電機是重要的執(zhí)行部件,而單片機作為控制核心,需要通過特定的方式驅(qū)動電機運轉(zhuǎn)。單片機驅(qū)動電機并非直接連接即可,而是要根據(jù)電機類型和功率,搭配合適的驅(qū)動電路,才能實現(xiàn)穩(wěn)定
    的頭像 發(fā)表于 07-25 09:31 ?1368次閱讀

    機智云配網(wǎng)教程第三期:單片機代碼移植實戰(zhàn)

    前言本篇文章將分享單片機移植的經(jīng)驗??梢韵螺d并按步驟移植,也可以直接使用已移植好的工程文件。文中將介紹我在移植過程中遇到的問題,并提供解決方
    的頭像 發(fā)表于 07-01 17:32 ?2225次閱讀
    機智云配網(wǎng)教程第三期:<b class='flag-5'>單片機</b>代碼<b class='flag-5'>移植</b>實戰(zhàn)

    使用恩智浦FRDM-MCXN947開發(fā)板移植LVGLbenchmark

    在彈出的組件選擇框中查找或者輸入lvgl并勾選,導(dǎo)入LVGL組件,如下圖所示。
    的頭像 發(fā)表于 06-20 10:34 ?2134次閱讀
    使用恩智浦FRDM-MCXN947開發(fā)板<b class='flag-5'>移植</b><b class='flag-5'>LVGL</b><b class='flag-5'>跑</b>benchmark

    10鐘上手睿擎平臺GUI開發(fā):第一LVGL圖形應(yīng)用

    ,在睿擎平臺上支持LVGL能夠更好地發(fā)揮其優(yōu)勢,為開發(fā)者帶來更多便利。一環(huán)境搭建:5鐘極速配置1.睿擎派硬件準備開發(fā)板:睿擎派(RK3506J,三核Cortex
    的頭像 發(fā)表于 06-06 18:41 ?3058次閱讀
    10<b class='flag-5'>分</b>鐘上手睿擎平臺GUI開發(fā):第一<b class='flag-5'>個</b><b class='flag-5'>LVGL</b>圖形應(yīng)用

    51單片機筆記(建議收藏?。?/a>

    了解一下。 5、掌握一電路設(shè)計軟件,對于單片機,其實會Protell99都可以了。 6、會使用萬用表,最好有示波器啦,而且要掌握一些常用的測試手段。 7、在自己學習過程中,整理并形成自己的元器件庫
    發(fā)表于 05-21 17:24
    楚雄市| 商丘市| 长汀县| 阳春市| 兴和县| 宁国市| 浦城县| 博兴县| 弥勒县| 贡觉县| 东安县| 长治市| 枣庄市| 康平县| 洛南县| 阿拉善左旗| 团风县| 资中县| 叶城县| 台北市| 威海市| 会昌县| 兴文县| 洪江市| 射洪县| 昭觉县| 瑞金市| 桃园市| 曲松县| 威海市| 隆化县| 紫金县| 江华| 亳州市| 昌图县| 宁陵县| 黄龙县| 锡林郭勒盟| 万州区| 囊谦县| 收藏|