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

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

3天内不再提示

【Ubuntu VSCODE+GCC】CW32L031实现printf工程

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

【Ubuntu VSCODE+GCC】CW32L031实现printf工程

一、工程包准备

我到时会把包附在后面。

二、在ubuntu下面新建一个目录cw32l031_uart,把工程包拷进这个目录,同时赋于文件所有的读写权限:chmod 777 -R ./CW32l031_GCC

三、用vscode打开CW32l031_GCC文件夹,并把文件夹添加到工种区。

四、在Core目录下面新建User文件夹,文件夹下新建user_uart.c/user_uar.h。同时赋予User及以下的包的有文件的读写权限。目录结构如下:

image.png

五、借鉴官方示例log,编写user_uart.c如下:

#include "user_uart.h"

static void SerialInit(uint32_t BaudRate);

static void SerialSend(uint8_t Data);

static uint8_t const pow2_table[] = {0, 1, 2, 3, 4, 5, 6, 7};

void LogInit(void)

{

SerialInit(LOG_SERIAL_BPS);

}

static void SerialInit(uint32_t BaudRate)

{

uint32_t PCLK_Freq;

GPIO_InitTypeDef GPIO_InitStructure = {0};

USART_InitTypeDef USART_InitStructure = {0};



PCLK_Freq = SystemCoreClock > > pow2_table[CW_SYSCTRL- >CR0_f.HCLKPRS];

PCLK_Freq > >= pow2_table[CW_SYSCTRL- >CR0_f.PCLKPRS];



// 调试串口使用UART1

//  PA8- >TX

//  PA9< -RX

// 时钟使能

__RCC_GPIOA_CLK_ENABLE();

__RCC_UART1_CLK_ENABLE();



// 先设置UART TX RX 复用,后设置GPIO的属性,避免口线上出现毛刺

PA08_AFx_UART1TXD();

PA09_AFx_UART1RXD();



GPIO_InitStructure.Pins = GPIO_PIN_8;

GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_Init(CW_GPIOA, &GPIO_InitStructure);



GPIO_InitStructure.Pins = GPIO_PIN_9;

GPIO_InitStructure.Mode = GPIO_MODE_INPUT;

GPIO_Init(CW_GPIOA, &GPIO_InitStructure);



USART_InitStructure.USART_BaudRate = BaudRate;

USART_InitStructure.USART_Over = USART_Over_16;

USART_InitStructure.USART_Source = USART_Source_PCLK;

USART_InitStructure.USART_UclkFreq = PCLK_Freq;

USART_InitStructure.USART_StartBit = USART_StartBit_FE;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;





USART_Init(CW_UART1, &USART_InitStructure);

}

static void SerialSend(uint8_t Data)

{

USART_SendData_8bit(CW_UART1, Data);

while (USART_GetFlagStatus(CW_UART1, USART_FLAG_TXE) == RESET);

}

int _write (int fd, char *pBuffer, int size)

{

for (int i = 0; i < size; i++)  

{  

    SerialSend((uint8_t)pBuffer[i]);

}  

return size;

}

【代码解释】在log.c中,我们是基于mdk的printf函数重定向,在gcc工程下面编译是不会报错,但是是不会向串口输出的,所以要修改_write函数。

六、添加User目录到Core.mk中:

image.png

七、编译与下载,我们执行make flash就可实现工程编译与下载:

image.png

八、效果展示:

PA8PA9分别接到USB转TTL,打开串口调度助手,就可以实现hello cw32l031的欢迎信息了:

image.png

【小结】使用ubuntu下的vscode+gcc进行CW32L031开发,相比MDK\\IAR,是一款免费的开发板工具,同时相比MDK编译等速度上又有质的飞跃!

附工程包:

*附件:cw32l031_gcc.zip

审核编辑:汤梓红

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

    关注

    22

    文章

    1159

    浏览量

    99961
  • Ubuntu
    +关注

    关注

    5

    文章

    533

    浏览量

    28834
  • 编译
    +关注

    关注

    0

    文章

    615

    浏览量

    32392
  • Printf
    +关注

    关注

    0

    文章

    79

    浏览量

    13478
收藏 人收藏

    评论

    相关推荐

    创建CW32L083GCC工程模板

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

    首创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><b class='flag-5'>工程</b>创建、下载、调试

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

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

    Ubuntu VSCODE+GCCCW32L031实现UART控制LED

    ubuntu系统下面使用vscode 使用串口驱动实现对板载LED灯的控制。
    的头像 发表于 06-28 17:10 533次阅读
    【<b class='flag-5'>Ubuntu</b> <b class='flag-5'>VSCODE+GCC</b>】<b class='flag-5'>CW32L031</b><b class='flag-5'>实现</b>UART控制LED

    Ubuntu VSCODE+GCCCW32L031驱动sht30

    CW32L031ubuntu下面,使用VSCODE+gcc实现对sht30温湿计的驱动
    的头像 发表于 06-28 17:12 2.3w次阅读
    <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系列产品介绍

    指南和购买渠道主流开发设计工具和编程器厂家已实现CW32L031系列的支持。同时还有配套的开发工具,用于CW32L031系列MCU的评估。CW32L031CxTx StartKit
    发表于 09-16 10:30

    首创CW32L083GCC工程模版

    的启动文件跟LD应该可以相互借鉴。所以偿试修改CW32F030的工程实现GCC工程。 【实现
    发表于 06-19 22:17

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

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

    CW32L031产品介绍

    CW32L031是一款基于eFlash的单芯片低功耗微控制器,集成了ARM®Cortex®-M0+ 核心,主频高达48MHz,高速嵌入式存储器(高达64KB的FLASH和 高达8K字节的SRAM
    发表于 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 868次阅读
    【产品介绍】32位低功耗MCU <b class='flag-5'>CW32L031</b>系列产品介绍