0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

华仔的编程随笔 来源:华仔的编程随笔 作者:华仔的编程随笔 2023-06-28 17:10 次阅读

【目的】实现UART发送命令控制板载LED

一、复制一份工种到新的文件夹:sudo cp -r cw32l031_uart cw32l031_uart_iqr,然后给新的文件夹赋予读写权限:sudo chmod 777 -R cw32l031_uart_iqr/

二、用VSCode打开该工程文件夹

image.png

三、在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关断。同时打印出发送的内容。

image.png
审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    240

    文章

    23060

    浏览量

    656988
  • uart
    +关注

    关注

    22

    文章

    1219

    浏览量

    101112
  • Ubuntu
    +关注

    关注

    5

    文章

    559

    浏览量

    29496
  • GPIO
    +关注

    关注

    16

    文章

    1188

    浏览量

    51828
收藏 人收藏

    评论

    相关推荐

    创建CW32L083GCC工程模板

    首创武汉芯源CW32L083GCC工程模版,解决官方没有提供的用于linux、macOs下的开发难题。
    的头像 发表于 06-20 09:03 1962次阅读

    首创ubuntucw32l031vscode+gcc工程创建、下载、调试

    首创在ubuntu下面用vscode实现cw32l031gcc工程创建、编译、下载与调试
    的头像 发表于 06-25 21:49 2.4w次阅读
    首创<b class='flag-5'>ubuntu</b>下<b class='flag-5'>cw32l031</b>的<b class='flag-5'>vscode+gcc</b>工程创建、下载、调试

    CW32 搭建VSCODE+GCC交叉编译环境

    在win10下面创建vscode+gcc开发武汉芯源CW32L系列MCU的编译环境
    的头像 发表于 06-28 17:02 2.5w次阅读
    <b class='flag-5'>CW</b>32 搭建<b class='flag-5'>VSCODE+GCC</b>交叉编译环境

    Ubuntu VSCODE+GCCCW32L031实现printf工程

    CW32L031ubuntu系统下面实现GCC,驱动UART实现printf工程
    的头像 发表于 06-28 17:07 1001次阅读
    【<b class='flag-5'>Ubuntu</b> <b class='flag-5'>VSCODE+GCC</b>】<b class='flag-5'>CW32L031</b><b class='flag-5'>实现</b>printf工程

    Ubuntu VSCODE+GCCCW32L031驱动sht30

    CW32L031ubuntu下面,使用VSCODE+gcc实现对sht30温湿计的驱动
    的头像 发表于 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>驱动sht30

    武汉芯源CW32L031实现超远距离超低耗无线采集

    武汉芯源的CW32L031实现超低功耗无线温湿度采集,可实现在电池供电下,十年的工作时间。
    的头像 发表于 06-30 16:03 2.2w次阅读
    武汉芯源<b class='flag-5'>CW32L031</b><b class='flag-5'>实现</b>超远距离超低耗无线采集

    【产品介绍】32位低功耗MCU CW32L031系列产品介绍

    、最大8K字节RAM,支持最多39路I/O接口。外设包括:1路12位ADC,3路UART、1路SPI、1路IIC、模拟电压比较器、低电压检测器以及多路定时器等功能模块。CW32L031系列产品目前可提供
    发表于 09-16 10:30

    首创CW32L083GCC工程模版

    VScode或者其他的编译器来实现开发环境的搭建,就需要自己编写CW32L083_FLASH.ld、以及startup_cw32l083_gcc.s。 【
    发表于 06-19 22:17

    ubuntu下面用vscdoe实现CW32L031的工程创建、编译、下载与调试

    目前官方提供CW32L083只提供了MDK、IAR下的固件库、启动文件。我有过成功CW32L083的项目移植的经验,现在成功的把CW32L031的工程移植到ubuntu下面,
    发表于 06-25 21:13

    CW32L031产品介绍

    )以及广泛的增强型外围设备和I/O。 所有设备都提供标准通信接口(三个UART、一个SPI、一个I2C)、一个12位ADC、五个 通用和基本定时器以及高级控制PWM定时器。 CW32L031工作在-40℃至85℃的温度范围内,电
    发表于 09-14 06:02

    CW32L031控制器数据手册

    CW32L031 是基于 eFlash 的单芯片低功耗微控制器,集成了主频高达 48MHz 的 ARM® Cortex®-M0+ 内核、高速嵌入式存储器(多至 64K 字节 FLASH 和多至 8K
    发表于 09-14 08:26

    CW32L031用户手册

    CW32L031核心是32位ARM®Cortex®-M0+微处理器,最大寻址空间为4GB。芯片的内置程序存储器、数据存储器、外围设备和端口寄存器是统一的在相同的4GB线性地址空间中寻址。 内存中
    发表于 09-14 07:09

    CW32L031微处理器用户手册

    CW32L031 在使用中需要注意如下事项:•FLASH、SRAM 以及 GPIOx_ODR、CRC_DR 等少数寄存器支持 8bit/16bit/32bit 访问方式,其它外设只支持32bit
    发表于 09-14 07:12

    CW32L031 StartKit软件包

    CW32L031 StartKit 软件包
    发表于 09-15 07:58

    【产品介绍】32位低功耗MCU CW32L031系列产品介绍

    Cortex-M0+低功耗MCUCW32L031系列型号展示武汉芯源半导体32位低功耗CW32L031系列集成了主频可达48MHz的ARMCortex®-M0+内核,最大64K字节FLASH、最大
    的头像 发表于 09-16 10:42 1383次阅读
    【产品介绍】32位低功耗MCU <b class='flag-5'>CW32L031</b>系列产品介绍