打印
[开发资料]

【Ubuntu VSCODE+GCC】CW32L031实现UART控制LED

[复制链接]
32410|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lulugl|  楼主 | 2023-6-28 17:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#申请原创# #有奖活动#

【目的】实现UART发送命令控制板载LED灯
一、复制一份工种到新的文件夹:sudo cp -r cw32l031_uart  cw32l031_uart_iqr,然后给新的文件夹赋予读写权限:sudo chmod 777 -R cw32l031_uart_iqr/
二、用VSCode打开该工程文件夹

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

NVIC_SetPriority(UART1_IRQn, 0); //优先级,无优先级分组

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

四、修改中断函数
主要的思路是:
1、如果进入了中断,首先判断是不是UART1的接收中断,如果是则接收一个字节数的数据。
2、如果接收超过了最长长度,则计数归零,如果接收到了’\n’说明接收一次数据完成,更新标志位。
3、清除接收标志位。
void UART1_IRQHandler(void)

{

/* USER CODE BEGIN */

if(USART_GetITStatus(CW_UART1, USART_IT_RC) != RESET) // 获取UARTx中断标志位

{

rx_buff[rx_cnt] = USART_ReceiveData_8bit(CW_UART1);

//如果接收达到上限,则回到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主函数中,我们判断是否接收完数据,如果接收完数据,则进来判断,如果是LED_ON则点亮LED灯,如果是LED_OFF则关断LED灯。
Main主函数代码如下:
int main(void)

{

LED_Init();

LogInit();

USART_ITConfig(CW_UART1, USART_IT_RC, ENABLE);

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

// 开启两线调试接口

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;

}

实验效果,发送LED_ON板载的LED亮,发送LED_OFF板载的LED关断。同时打印出发送的内容。


使用特权

评论回复
评论
lulugl 2023-6-29 10:14 回复TA
@pssyx :USB-TTL是接的win10下面的。 
lulugl 2023-6-29 10:13 回复TA
@pssyx :linux是windows下地虚拟机。 
pssyx 2023-6-29 09:20 回复TA
为何Linux下编程,测试又回到了windows?Linux下串口终端不也很好吗? 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

159

主题

762

帖子

10

粉丝