一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

AS32X601驅(qū)動系列教程 GPIO_點(diǎn)亮LED詳解

安芯 ? 來源:jf_29981791 ? 作者:jf_29981791 ? 2025-05-23 16:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式開發(fā)的奇妙旅程中,GPIO(通用輸入輸出接口)作為芯片與外部世界交互的重要橋梁,扮演著不可或缺的角色。從簡單的 LED 燈控制,到復(fù)雜的外設(shè)通信,GPIO 的靈活運(yùn)用為開發(fā)者打開了無限可能的大門。自本章開始,正式開始用代碼控制AS32x601各外設(shè)完成功能配置。

需要注意的是,AS32X601提供了8組GPIO,其中GPIOA~GPIOG寄存器操作完全一致,但在使用GPIOH的時候,寄存器列表中間少了一個32位寄存器,因此在使用過程中容易造成誤操作,我們在驅(qū)動庫中已經(jīng)做了映射,若想要自行操作寄存器進(jìn)行控制,需要格外注意這一點(diǎn)。

另外,在芯片的IO復(fù)用表中,其默認(rèn)功能并非全部都是GPIO,還包含了MUL類型,使用此類型IO時,需要先將復(fù)用配置為GPIO功能,在完成接下來的操作。

硬件設(shè)計(jì)

AS32x601評估板板載3顆LED燈用于IO輸出評估,原理圖如下:

根據(jù)上圖可以知道,LED“正極”接電源,“負(fù)極”接GPIOG三個引腳,當(dāng)IO拉低時,LED亮,IO輸出高時,LED滅,據(jù)此設(shè)計(jì)控制邏輯。

程序設(shè)計(jì)

操作流程

  1. 開led對應(yīng)IO時鐘
  2. 檢查對應(yīng)引腳默認(rèn)配置,是否需要復(fù)用調(diào)整
  3. 初始化gpio結(jié)構(gòu)體
  4. 控制gpio輸出

主要代碼分析

復(fù)制上一小節(jié)的工程模板,在工程目錄下新建Bsp文件夾用于存放led相關(guān)控制代碼,在IAR工程界面添加led.c和led.h文件。

在led.c文件中添加相應(yīng)頭文件,之后編寫led初始化代碼。

  1. /*
    • Function: User_LED_Init
    • Description: Configure LED GPIO.
    • Return: None.
  2. */
  3. void User_LED_Init()
  4. {
  5. GPIO_InitTypeDef GPIO_InitStructure;
  6. GPIOG_CLK_ENABLE();
  7. /* GPIOB Configure */
  8. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
  9. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  10. GPIO_InitStructure.GPIO_OType = GPIO_Out_PP;
  11. GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_9mA;
  12. GPIO_Init(GPIOG, &GPIO_InitStructure);
  13. }

在上述代碼清單中,根據(jù)電路原理圖,led與mcu的PG10、14、15引腳相連,因此我們首先打開GPIOG的時鐘使能;

之后初始化gpio結(jié)構(gòu)體,通過或操作同時對三個引腳進(jìn)行初始化,配置推挽輸出,同時配置io輸出能力位9mA。

接下來,我們用宏定義的形式編寫LED的控制函數(shù)。

  1. #define LED1_ON() GPIO_WriteBits(GPIOG, GPIO_Pin_15, GPIO_OCtrl_Vol)
  2. #define LED1_OFF() GPIO_WriteBits(GPIOG, GPIO_Pin_15, GPIO_OCtrl_Voh)
  3. #define LED1_TOGGLE() GPIO_ToggleBits(GPIOG, GPIO_Pin_15)
  4. #define LED2_ON() GPIO_WriteBits(GPIOG, GPIO_Pin_14, GPIO_OCtrl_Vol)
  5. #define LED2_OFF() GPIO_WriteBits(GPIOG, GPIO_Pin_14, GPIO_OCtrl_Voh)
  6. #define LED2_TOGGLE() GPIO_ToggleBits(GPIOG, GPIO_Pin_14)
  7. #define LED3_ON() GPIO_WriteBits(GPIOG, GPIO_Pin_10, GPIO_OCtrl_Vol)
  8. #define LED3_OFF() GPIO_WriteBits(GPIOG, GPIO_Pin_10, GPIO_OCtrl_Voh)
  9. #define LED3_TOGGLE() GPIO_ToggleBits(GPIOG, GPIO_Pin_10)

在led.h文件中添加如上代碼,AS32驅(qū)動庫中包含了引腳控制輸出函數(shù)以及引腳翻轉(zhuǎn)控制函數(shù),通過宏的形式完成led控制名稱的轉(zhuǎn)換,便于理解。

此時,代碼并不算完成,之后我們需要查詢芯片設(shè)計(jì)手冊中,GPIOG所在的總線,在系統(tǒng)時鐘配置函數(shù)中需要打開對應(yīng)總線時鐘,具體方式參考上一小節(jié)。

最后,編寫主函數(shù)代碼,控制三個led燈流水閃爍。

  1. void main()
  2. {
  3. Systemclock_Init();
  4. delay_init(SMU_ClocksStruct.AXIBus0_Frequency/1000000);
  5. /* Initialize LED */
  6. User_LED_Init();
  7. while(1)
  8. {
  9. LED1_ON();LED2_OFF();LED3_OFF();
  10. delay_ms(100);
  11. LED1_OFF();LED2_ON();LED3_OFF();
  12. delay_ms(100);
  13. LED1_OFF();LED2_OFF();LED3_ON();
  14. delay_ms(100);
  15. }
  16. }

補(bǔ)充

在這個代碼中調(diào)用了一個延時函數(shù),該函數(shù)位于庫文件System目錄下,利用RISCV的CSR定時器,可以理解為系統(tǒng)定時器編寫的精確延時函數(shù),因此需要對此函數(shù)進(jìn)行初始化,并傳入當(dāng)前系統(tǒng)時鐘。

  1. delay_init(SMU_ClocksStruct.AXIBus0_Frequency/1000000);

SMU_ClocksStruct.AXIBus0_Frequency就是在系統(tǒng)時鐘初始化函數(shù)中最后一個函數(shù)調(diào)用所讀回來的所有總線時鐘,由于Core時鐘與AXIBus0同頻,所以在此處就利用該參數(shù)進(jìn)行延時初始化,除1000000的作用是,延時計(jì)算的時候單位為MHz,所以把后邊的數(shù)量級給除掉。

審核編輯 黃宇

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

    關(guān)注

    242

    文章

    23785

    瀏覽量

    672363
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17915

    瀏覽量

    362580
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1279

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    解鎖Air780EPM:N種GPIO操控LED的實(shí)戰(zhàn)技巧!

    ——通過硬件層精確控制電路參數(shù),結(jié)合LuatOS高效API實(shí)現(xiàn)快速原型開發(fā),適用于智能照明、狀態(tài)指示等物聯(lián)網(wǎng)場景。 ? 一、GPIO直接驅(qū)動LED 1.1?適用場景 低功耗場景:LED
    的頭像 發(fā)表于 05-28 16:56 ?198次閱讀
    解鎖Air780EPM:N種<b class='flag-5'>GPIO</b>操控<b class='flag-5'>LED</b>的實(shí)戰(zhàn)技巧!

    AS32X601驅(qū)動系列教程 PLIC_中斷應(yīng)用詳解

    平臺中斷控制器(Platform Level Interrupt Controller,PLIC)是國科安芯AS32系列MCU芯片的中斷控制器,主要對中斷源進(jìn)行采樣,優(yōu)先級仲裁和分發(fā)。各外設(shè)中斷統(tǒng)一
    的頭像 發(fā)表于 05-23 17:10 ?167次閱讀
    <b class='flag-5'>AS32X601</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>系列</b>教程 PLIC_中斷應(yīng)用<b class='flag-5'>詳解</b>

    AS32X601驅(qū)動系列教程 USART_串口通訊詳解

    國科安芯的AS32系列MCU芯片集成7路USART,能夠靈活地與外部設(shè)備進(jìn)行全雙工數(shù)據(jù)交換,滿足外部設(shè)備對工業(yè)標(biāo)準(zhǔn) NRZ 異步串行數(shù)據(jù)格式的要求。USART 通過小數(shù)波特率發(fā)生器實(shí)現(xiàn)了多種波特率
    的頭像 發(fā)表于 05-23 16:54 ?298次閱讀
    <b class='flag-5'>AS32X601</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>系列</b>教程 USART_串口通訊<b class='flag-5'>詳解</b>

    AS32X601驅(qū)動系列教程 GPIO_按鍵檢測詳解

    在嵌入式系統(tǒng)開發(fā)中,GPIO(通用輸入輸出端口)是實(shí)現(xiàn)硬件與軟件交互的關(guān)鍵組件。本節(jié)主要利用的時GPIO的輸入采集功能,本節(jié)的主要功能為,讀取板載按鍵,當(dāng)按鍵按下時,對應(yīng)led亮起,抬起按鍵,對應(yīng)
    的頭像 發(fā)表于 05-23 16:44 ?209次閱讀
    <b class='flag-5'>AS32X601</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>系列</b>教程 <b class='flag-5'>GPIO_</b>按鍵檢測<b class='flag-5'>詳解</b>

    AS32X601驅(qū)動系列教程 SMU_系統(tǒng)時鐘詳解

    時鐘和復(fù)位的管理。在默認(rèn)狀態(tài)下SMU工作在IDLE狀態(tài)。只有接收到PMU的使能信號后才開始工作。SMU模塊會根據(jù)PMU的指令自動配置COR、AXIBUS0/1/2等總線的時鐘和復(fù)位。 需要注意的是,MCU芯片AS32X601可通過BOOT選擇從外部QSPI Flash啟動和內(nèi)部PFlash啟動,
    的頭像 發(fā)表于 05-23 16:01 ?290次閱讀
    <b class='flag-5'>AS32X601</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>系列</b>教程 SMU_系統(tǒng)時鐘<b class='flag-5'>詳解</b>

    HTR3310 10路LED驅(qū)動器和GPIO控制器中文手冊

    ? ? ? HTR3310是一款10路多功能LED驅(qū)動器和GPIO控制器2.5V~5.5V電源供電。10個IO端口中的任何一個都可以配置為LED模式或
    發(fā)表于 04-14 16:31 ?1次下載

    HTR3316 16路LED驅(qū)動器和GPIO控制器中文手冊

    ? ? ?HTR3316是一款16路多功能LED驅(qū)動器和GPIO控制器,2.5V~5.5V電源供電。16個IO端口中的任何一個都可以配置為LED模式或
    發(fā)表于 04-11 17:51 ?0次下載

    面向工業(yè)與汽車領(lǐng)域的高安全可靠MCU——AS32X601系列芯片解析

    AS32X601系列是國科安芯研發(fā)的32位RISC-V架構(gòu)MCU,專為高安全性、高可靠性場景設(shè)計(jì),覆蓋工業(yè)控制、汽車電子等關(guān)鍵領(lǐng)域。其核心優(yōu)勢在于通過硬件級安全機(jī)制、多重冗余設(shè)計(jì)及功能安全認(rèn)證,滿足
    的頭像 發(fā)表于 03-14 16:40 ?457次閱讀

    AS32X601芯片技術(shù)剖析

    芯片簡介 AS32X601系列MCU是國產(chǎn)高可靠嵌入式處理器的重要突破,其企業(yè)宇航級型號AS32S601針對空間輻射環(huán)境與極端溫度條件優(yōu)化,滿足衛(wèi)星載荷控制、航天器運(yùn)動控制等場景需求。該芯片采用
    的頭像 發(fā)表于 03-14 16:17 ?461次閱讀

    AS32X601雙核鎖步MCU技術(shù)優(yōu)勢分析

    AS32X601是國科安芯公司研制的一系列基于32位RISC-V指令集車規(guī)級MCU處理器芯片。主頻高達(dá)180MHz,支持雙核鎖步架構(gòu),基于軟錯誤防護(hù)技術(shù)加持,顯著提高芯片安全性能。產(chǎn)品具有高安全、低
    的頭像 發(fā)表于 03-07 16:12 ?423次閱讀

    【敏矽微ME32G070開發(fā)板免費(fèi)體驗(yàn)】+ADC測試與LED點(diǎn)亮

    *附件:【敏矽微ME32G070開發(fā)板免費(fèi)體驗(yàn)】+ADC測試與LED點(diǎn)亮.docx【敏矽微ME32G070開發(fā)板免費(fèi)體驗(yàn)】+ADC測試與LED點(diǎn)亮 收到了敏矽微ME32G070開發(fā)板,
    發(fā)表于 12-16 19:00

    HTR3306 6路LED驅(qū)動器和GPIO控制器

    HTR3306是一款6路多功能LED驅(qū)動器和GPIO控制器,2.5V~5.5V電源供電。10個IO端口中的任何一個都可以配置為LED模式或GPIO
    的頭像 發(fā)表于 11-20 15:57 ?547次閱讀
    HTR3306  6路<b class='flag-5'>LED</b><b class='flag-5'>驅(qū)動</b>器和<b class='flag-5'>GPIO</b>控制器

    HTR3310 10路LED驅(qū)動器和GPIO控制器

    HTR3310是一款10路多功能LED驅(qū)動器和GPIO控制器,2.5V~5.5V電源供電。10個IO端口中的任何一個都可以配置為LED模式或GPIO
    的頭像 發(fā)表于 10-08 09:58 ?555次閱讀
    HTR3310 10路<b class='flag-5'>LED</b><b class='flag-5'>驅(qū)動</b>器和<b class='flag-5'>GPIO</b>控制器

    HTR3316 16路LED驅(qū)動器和GPIO控制器

    HTR3316是一款16路多功能LED驅(qū)動器和GPIO控制器,2.5V~5.5V電源供電。16個IO端口中的任何一個都可以配置為LED模式或GPIO
    的頭像 發(fā)表于 09-29 14:41 ?668次閱讀
    HTR3316 16路<b class='flag-5'>LED</b><b class='flag-5'>驅(qū)動</b>器和<b class='flag-5'>GPIO</b>控制器

    HTR3310 10路LED驅(qū)動器和GPIO控制器

    HTR3310是一款10路多功能LED驅(qū)動器和GPIO控制器,2.5V~5.5V電源供電。10個IO端口中的任何一個都可以配置為LED模式或GPIO
    的頭像 發(fā)表于 09-24 17:56 ?800次閱讀
    HTR3310  10路<b class='flag-5'>LED</b><b class='flag-5'>驅(qū)動</b>器和<b class='flag-5'>GPIO</b>控制器