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

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

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

【Ubuntu VSCODE+GCC】CW32L031實(shí)現(xiàn)UART控制LED

華仔的編程隨筆 ? 來(lái)源:華仔的編程隨筆 ? 作者:華仔的編程隨筆 ? 2023-06-28 17:10 ? 次閱讀

【目的】實(shí)現(xiàn)UART發(fā)送命令控制板載LED

一、復(fù)制一份工種到新的文件夾:sudo cp -r cw32l031_uart cw32l031_uart_iqr,然后給新的文件夾賦予讀寫權(quán)限:sudo chmod 777 -R cw32l031_uart_iqr/

二、用VSCode打開該工程文件夾

image.png

三、在usre_uart.c中增加中斷的配置

NVIC_SetPriority(UART1_IRQn, 0); //優(yōu)先級(jí),無(wú)優(yōu)先級(jí)分組

NVIC_EnableIRQ(UART1_IRQn); //UARTx中斷使能

四、修改中斷函數(shù)

主要的思路是:

1、如果進(jìn)入了中斷,首先判斷是不是UART1的接收中斷,如果是則接收一個(gè)字節(jié)數(shù)的數(shù)據(jù)。

2、如果接收超過(guò)了最長(zhǎng)長(zhǎng)度,則計(jì)數(shù)歸零,如果接收到了’\\n’說(shuō)明接收一次數(shù)據(jù)完成,更新標(biāo)志位。

3、清除接收標(biāo)志位。

void UART1_IRQHandler(void)

{

/* USER CODE BEGIN */

if(USART_GetITStatus(CW_UART1, USART_IT_RC) != RESET) // 獲取UARTx中斷標(biāo)志位

{

    rx_buff[rx_cnt] = USART_ReceiveData_8bit(CW_UART1); 

    //如果接收達(dá)到上限,則回到0

    if(rx_buff[rx_cnt] == '\\n')

    {

        rx_state = 1;

    }

    if(rx_cnt < UART_RX_MAX_LEN)

    {

        rx_cnt ++;

    }

    else

    {

        rx_cnt = 0;

    }

    USART_ClearITPendingBit(CW_UART1, USART_IT_RC);

}

/* USER CODE END */

}

五、要main主函數(shù)中,我們判斷是否接收完數(shù)據(jù),如果接收完數(shù)據(jù),則進(jìn)來(lái)判斷,如果是LED_ON則點(diǎn)亮LED燈,如果是LED_OFF則關(guān)斷LED燈。

Main主函數(shù)代碼如下:

int main(void)

{

LED_Init();

LogInit();

USART_ITConfig(CW_UART1, USART_IT_RC, ENABLE);

InitTick(24000000ul); //初始化SysTick

// 開啟兩線調(diào)試接口

RCC_SWDIO_Config(RCC_SYSCTRL_SWDIOEN);

printf("start\\r\\n");

while (1)

{

    if(rx_state == 1)

    {

        printf("recv: %s\\r\\n", rx_buff);

        rx_state = 0;

        rx_cnt = 0;

        if (rx_buff[0] == 'L' && \\

            rx_buff[1] == 'E' && \\

            rx_buff[2] == 'D' && \\

            rx_buff[3] == '_' && \\

            rx_buff[4] == 'O' && \\

            rx_buff[5] == 'N'  )

        {

            GPIO_WritePin(CW_GPIOC, GPIO_PIN_13, GPIO_Pin_RESET);

        }

        else if (/* condition */rx_buff[0] == 'L' && \\

            rx_buff[1] == 'E' && \\

            rx_buff[2] == 'D' && \\

            rx_buff[3] == '_' && \\

            rx_buff[4] == 'O' && \\

            rx_buff[5] == 'F' && \\

            rx_buff[6] == 'F' )

        {

            GPIO_WritePin(CW_GPIOC, GPIO_PIN_13, GPIO_Pin_SET);

        }

        memset(rx_buff, 0, UART_RX_MAX_LEN);

    }

    // GPIO_TogglePin(CW_GPIOC, GPIO_PIN_13);

    SysTickDelay(10);

}



return 0;

}

實(shí)驗(yàn)效果,發(fā)送LED_ON板載的LED亮,發(fā)送LED_OFF板載的LED關(guān)斷。同時(shí)打印出發(fā)送的內(nèi)容。

image.png
審核編輯:湯梓紅

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

    關(guān)注

    242

    文章

    23277

    瀏覽量

    660842
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1235

    瀏覽量

    101387
  • Ubuntu
    +關(guān)注

    關(guān)注

    5

    文章

    563

    瀏覽量

    29755
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1204

    瀏覽量

    52090
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    創(chuàng)建CW32L083GCC工程模板

    首創(chuàng)武漢芯源CW32L083GCC工程模版,解決官方?jīng)]有提供的用于linux、macOs下的開發(fā)難題。
    的頭像 發(fā)表于 06-20 09:03 ?2030次閱讀

    首創(chuàng)ubuntucw32l031vscode+gcc工程創(chuàng)建、下載、調(diào)試

    首創(chuàng)在ubuntu下面用vscode實(shí)現(xiàn)cw32l031gcc工程創(chuàng)建、編譯、下載與調(diào)試
    的頭像 發(fā)表于 06-25 21:49 ?2.4w次閱讀
    首創(chuàng)<b class='flag-5'>ubuntu</b>下<b class='flag-5'>cw32l031</b>的<b class='flag-5'>vscode+gcc</b>工程創(chuàng)建、下載、調(diào)試

    CW32 搭建VSCODE+GCC交叉編譯環(huán)境

    在win10下面創(chuàng)建vscode+gcc開發(fā)武漢芯源CW32L系列MCU的編譯環(huán)境
    的頭像 發(fā)表于 06-28 17:02 ?2.6w次閱讀
    <b class='flag-5'>CW</b>32 搭建<b class='flag-5'>VSCODE+GCC</b>交叉編譯環(huán)境

    Ubuntu VSCODE+GCCCW32L031實(shí)現(xiàn)printf工程

    CW32L031ubuntu系統(tǒng)下面實(shí)現(xiàn)GCC,驅(qū)動(dòng)UART,實(shí)現(xiàn)printf工程
    的頭像 發(fā)表于 06-28 17:07 ?1076次閱讀
    【<b class='flag-5'>Ubuntu</b> <b class='flag-5'>VSCODE+GCC</b>】<b class='flag-5'>CW32L031</b><b class='flag-5'>實(shí)現(xiàn)</b>printf工程

    Ubuntu VSCODE+GCCCW32L031驅(qū)動(dòng)sht30

    CW32L031ubuntu下面,使用VSCODE+gcc實(shí)現(xiàn)對(duì)sht30溫濕計(jì)的驅(qū)動(dòng)
    的頭像 發(fā)表于 06-28 17:12 ?2.4w次閱讀
    <b class='flag-5'>Ubuntu</b> <b class='flag-5'>VSCODE+GCC</b>】<b class='flag-5'>CW32L031</b>驅(qū)動(dòng)sht30

    武漢芯源CW32L031實(shí)現(xiàn)超遠(yuǎn)距離超低耗無(wú)線采集

    武漢芯源的CW32L031實(shí)現(xiàn)超低功耗無(wú)線溫濕度采集,可實(shí)現(xiàn)在電池供電下,十年的工作時(shí)間。
    的頭像 發(fā)表于 06-30 16:03 ?2.2w次閱讀
    武漢芯源<b class='flag-5'>CW32L031</b><b class='flag-5'>實(shí)現(xiàn)</b>超遠(yuǎn)距離超低耗無(wú)線采集

    【產(chǎn)品介紹】32位低功耗MCU CW32L031系列產(chǎn)品介紹

    、最大8K字節(jié)RAM,支持最多39路I/O接口。外設(shè)包括:1路12位ADC,3路UART、1路SPI、1路IIC、模擬電壓比較器、低電壓檢測(cè)器以及多路定時(shí)器等功能模塊。CW32L031系列產(chǎn)品目前可提供
    發(fā)表于 09-16 10:30

    首創(chuàng)CW32L083GCC工程模版

    VScode或者其他的編譯器來(lái)實(shí)現(xiàn)開發(fā)環(huán)境的搭建,就需要自己編寫CW32L083_FLASH.ld、以及startup_cw32l083_gcc.s。 【
    發(fā)表于 06-19 22:17

    ubuntu下面用vscdoe實(shí)現(xiàn)CW32L031的工程創(chuàng)建、編譯、下載與調(diào)試

    目前官方提供CW32L083只提供了MDK、IAR下的固件庫(kù)、啟動(dòng)文件。我有過(guò)成功CW32L083的項(xiàng)目移植的經(jīng)驗(yàn),現(xiàn)在成功的把CW32L031的工程移植到ubuntu下面,
    發(fā)表于 06-25 21:13

    CW32L031產(chǎn)品介紹

    )以及廣泛的增強(qiáng)型外圍設(shè)備和I/O。 所有設(shè)備都提供標(biāo)準(zhǔn)通信接口(三個(gè)UART、一個(gè)SPI、一個(gè)I2C)、一個(gè)12位ADC、五個(gè) 通用和基本定時(shí)器以及高級(jí)控制PWM定時(shí)器。 CW32L031工作在-40℃至85℃的溫度范圍內(nèi),電
    發(fā)表于 09-14 06:02

    CW32L031控制器數(shù)據(jù)手冊(cè)

    CW32L031 是基于 eFlash 的單芯片低功耗微控制器,集成了主頻高達(dá) 48MHz 的 ARM? Cortex?-M0+ 內(nèi)核、高速嵌入式存儲(chǔ)器(多至 64K 字節(jié) FLASH 和多至 8K
    發(fā)表于 09-14 08:26

    CW32L031用戶手冊(cè)

    CW32L031核心是32位ARM?Cortex?-M0+微處理器,最大尋址空間為4GB。芯片的內(nèi)置程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、外圍設(shè)備和端口寄存器是統(tǒng)一的在相同的4GB線性地址空間中尋址。 內(nèi)存中
    發(fā)表于 09-14 07:09

    CW32L031微處理器用戶手冊(cè)

    CW32L031 在使用中需要注意如下事項(xiàng):?FLASH、SRAM 以及 GPIOx_ODR、CRC_DR 等少數(shù)寄存器支持 8bit/16bit/32bit 訪問(wèn)方式,其它外設(shè)只支持32bit
    發(fā)表于 09-14 07:12

    CW32L031 StartKit軟件包

    CW32L031 StartKit 軟件包
    發(fā)表于 09-15 07:58

    【產(chǎn)品介紹】32位低功耗MCU CW32L031系列產(chǎn)品介紹

    Cortex-M0+低功耗MCUCW32L031系列型號(hào)展示武漢芯源半導(dǎo)體32位低功耗CW32L031系列集成了主頻可達(dá)48MHz的ARMCortex?-M0+內(nèi)核,最大64K字節(jié)FLASH、最大
    的頭像 發(fā)表于 09-16 10:42 ?1475次閱讀
    【產(chǎn)品介紹】32位低功耗MCU <b class='flag-5'>CW32L031</b>系列產(chǎn)品介紹