在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

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

最近LuatOS社區大神@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內核

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

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

●對現有外設進行了增強

例如內置USB上拉電阻、GPIO可以獨立上下拉等。

2

移植FreeRTOS與LVGL


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

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

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

特別注意:

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

本工程經實測可使用Keil5.36正常編譯。

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

2.1 工程組件


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

● FreeRTOS:

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

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

2.2 注意事項


● 中斷優先級:

Air32的NVIC中斷優先級只有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排除編譯,然后實現了自己的SystemInit()函數。該函數可以從合宙官方的SDK中獲取。

▼上下滾動,查看全部▼

C

voidSystemInit(void)

{

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

RCC_HSEConfig(RCC_HSE_ON); //使能HSE

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

RCC_PLLCmd(DISABLE);//關閉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作為系統時鐘

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

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

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

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

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

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

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

}

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

合宙Air32支持比STM32標準庫更高的RCC_PLLMul_xx值,因此還需要將air32f10x.h中新增的PLL值復制到自己的代碼中,這樣可以在使用熟悉的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新增的外設中斷,請自行更換STM32的啟動文件到Air32的啟動文件。

● Keil編譯器設置:

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

2.3 組件庫的裁剪與優化


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

● 系統棧:

由于使用了FreeRTOS,各個Task有其自己的任務棧,因此系統棧只有ISR與main函數使用。

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

● 任務棧:

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

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

● LVGL堆:

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

● LVGL緩沖區:

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

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

3

運行效果及總結


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

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)

單緩沖模式跑分結果:

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)

雙緩沖模式跑分結果:

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

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

● 實測總結:

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

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

    關注

    6067

    文章

    44960

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    使用恩智浦FRDM-MCXN947開發板移植LVGLbenchmark

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

    10鐘上手睿擎平臺GUI開發:第一LVGL圖形應用

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

    51單片機筆記(建議收藏!)

    了解一下。 5、掌握一電路設計軟件,對于單片機,其實會Protell99都可以了。 6、會使用萬用表,最好有示波器啦,而且要掌握一些常用的測試手段。 7、在自己學習過程中,整理并形成自己的元器件庫
    發表于 05-21 17:24

    國產單片機倒車影像合作

    尋找國產低成本單芯片單片機AMT630,SSD101合作方案, 尋找國產低成本單芯片單片機AMT630,SSD101合作方案, 尋找國產低成
    發表于 04-29 09:00

    移植LWIP+FREERTOS時遇到的問題怎么解決?

    各位大佬,小弟在嘗試移植LWIP+FREERTOS的時候出現了如下問題,請各位大佬幫忙看看是哪里的問題,我用了FreeRTOS+LWIP做ModbusTCP時出現了鏈接出現通信12次然后通信
    發表于 03-11 06:48

    Deepseek上單片機?RT-Thread上通大語言模型

    前言單片機也能聊天?RT-Thread上通大語言模型在RT-Thread論壇上忽然看到了單片機和大模型對話的文章,想著春節期間看到大語言模型的熱度持續攀升,恰巧手頭有RA8D1Vi
    的頭像 發表于 02-07 18:59 ?1393次閱讀
    Deepseek上<b class='flag-5'>單片機</b>?RT-Thread上<b class='flag-5'>跑</b>通大語言模型

    什么原因會導致單片機程序

    ______________________________________ 什么原因會導致單片機程序
    發表于 10-16 22:31

    國產主流8位單片機-RISC架構精簡指令集單片機

    在當前的電子產品開發領域,8位單片機仍然占據著重要的地位,尤其是在嵌入式系統和低功耗應用中。RISC(簡化指令集計算)架構以其高效性和簡單性,成為了國產主流8位單片機。RISC架構通過減少指令集
    發表于 09-27 10:15

    國產8位單片機在國內的應用情況及發展趨勢!

    隨著科技的迅速發展,單片機作為電子產品的核心控制器,其應用領域不斷擴大。特別是國產8位單片機,因其低成本、易編程及良好的兼容性,越來越受到國內電子產品開發者和企業的青睞。英銳恩科技的小篇將跟大家
    發表于 09-26 16:09

    英銳恩科技,以實力打造國產單片機替代品牌!

    長久以來,國際品牌在單片機市場占據主導地位,幾乎被國外龍頭企業所壟斷,但在“中國芯”替代和全球不太穩定的市場環境下,國內單片機研發技術日漸成熟,單片機國產替代力量的崛起正成為不可忽視的
    發表于 09-25 09:49

    freertos最多支持多少任務

    FreeRTOS是一輕量級的實時操作系統(RTOS),其設計初衷就是為了提供簡單、可靠且高效的實時任務管理。關于FreeRTOS最多支持多少任務的問題,實際上并沒有一
    的頭像 發表于 09-02 14:21 ?2152次閱讀

    單片機燒錄程序可以重新燒嗎

    單片機(Microcontroller Unit, MCU)是一種集成電路芯片,它將計算機的CPU、存儲器、輸入/輸出接口等集成在一芯片上,用于控制各種電子設備。單片機燒錄程序是指將編寫
    的頭像 發表于 09-02 10:04 ?2996次閱讀

    國產單片機(MCU)崛起 —— 51系列

    一、51系列單片機的命名由來51系列單片機的命名由來與它的設計和開發歷史相關。這個系列的單片機主要由Intel的8051微控制器發展而來,后來被多個公司采用和改進,形成了一廣泛使用的
    的頭像 發表于 08-14 08:39 ?6998次閱讀
    <b class='flag-5'>國產</b><b class='flag-5'>單片機</b>(MCU)崛起 —— 51系列

    lvgl移植到RT-Thread Nano后進入硬件錯誤中斷的原因?

    使用的是RT-Thread Nano的最新版,第一次移植,不知道是不是因為這個lvgl只能移植到標準版里? 嘗試過給lvgl的線程分配更大的棧,但是依舊會卡死在硬件錯誤中斷里。但只要把
    發表于 07-04 07:40

    暑假如何學習單片機

    暑假是學習和掌握單片機基礎知識的良好時機。以下是一關于如何在暑假期間學習單片機的建議計劃
    的頭像 發表于 07-03 09:19 ?884次閱讀
    一<b class='flag-5'>個</b>暑假如何學習<b class='flag-5'>單片機</b>
    主站蜘蛛池模板: 色婷婷99综合久久久精品 | 色香蕉在线视频 | 久久久久久免费观看 | 激情婷婷综合久久久久 | 亚州一级 | 日本免费的一级绿象 | se视频在线观看 | 国模龙园园私拍337p | 黄色网免费观看 | 人人干国产| 加勒比精品久久一区二区三区 | 天天操天天操天天操天天操 | 狠狠色狠狠干 | 美女网站一区二区三区 | 欧美精品 在线播放 | 边做饭边被躁欧美三级小说 | 国产乱码1卡一卡二卡 | 免费观看成人欧美1314www | 亚洲精品综合网在线8050影院 | 国产成人夜间影院在线观看 | 日本68xxxxxxxxx老师 | 中文字幕一区二区三区在线不卡 | 亚洲阿v天堂2018在线观看 | 1314亚洲人成网站在线观看 | 久久久精品波多野结衣 | 大胆国模一区二区三区伊人 | 婷婷综合激情 | 免费高清成人啪啪网站 | 很黄的网站在线观看 | 性欧美hd | 国产成人亚洲精品77 | 亚洲在线a | 欧美成人午夜片一一在线观看 | 久久国产精品视频 | 一级毛片在线播放 | 久久精品国产乱子伦多人 | 在线免费观看一级毛片 | 国内精品久久久久影院免费 | 老司机精品免费视频 | 中国同志chinese小彬tv | 成人爽爽激情在线观看 |