日韩精品中文字幕动漫_国产高清视频免费最新在线_玖玖资源站在线免费观看_亚洲日本三级中文字幕

您的位置:首頁(yè) >聚焦 >

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

2023-06-28 17:08:34    來(lái)源:華仔的編程隨筆

【目的】實(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打開(kāi)該工程文件夾

三、在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// 開(kāi)啟兩線調(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)容。

審核編輯:湯梓紅

標(biāo)簽:

相關(guān)閱讀