【Ubuntu VSCODE+GCC】CW32L031實(shí)現(xiàn)printf工程
一、工程包準(zhǔn)備
我到時(shí)會(huì)把包附在后面。
二、在ubuntu下面新建一個(gè)目錄cw32l031_uart,把工程包拷進(jìn)這個(gè)目錄,同時(shí)賦于文件所有的讀寫權(quán)限:chmod 777 -R ./CW32l031_GCC
三、用vscode打開CW32l031_GCC文件夾,并把文件夾添加到工種區(qū)。
四、在Core目錄下面新建User文件夾,文件夾下新建user_uart.c/user_uar.h。同時(shí)賦予User及以下的包的有文件的讀寫權(quán)限。目錄結(jié)構(gòu)如下:
五、借鑒官方示例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];
// 調(diào)試串口使用UART1
// PA8- >TX
// PA9< -RX
// 時(shí)鐘使能
__RCC_GPIOA_CLK_ENABLE();
__RCC_UART1_CLK_ENABLE();
// 先設(shè)置UART TX RX 復(fù)用,后設(shè)置GPIO的屬性,避免口線上出現(xiàn)毛刺
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函數(shù)重定向,在gcc工程下面編譯是不會(huì)報(bào)錯(cuò),但是是不會(huì)向串口輸出的,所以要修改_write函數(shù)。
六、添加User目錄到Core.mk中:
七、編譯與下載,我們執(zhí)行make flash就可實(shí)現(xiàn)工程編譯與下載:
八、效果展示:
PA8PA9分別接到USB轉(zhuǎn)TTL,打開串口調(diào)度助手,就可以實(shí)現(xiàn)hello cw32l031的歡迎信息了:
【小結(jié)】使用ubuntu下的vscode+gcc進(jìn)行CW32L031開發(fā),相比MDK\\IAR,是一款免費(fèi)的開發(fā)板工具,同時(shí)相比MDK編譯等速度上又有質(zhì)的飛躍!
附工程包:
審核編輯:湯梓紅
-
uart
+關(guān)注
關(guān)注
22文章
1235瀏覽量
101354 -
Ubuntu
+關(guān)注
關(guān)注
5文章
563瀏覽量
29704 -
編譯
+關(guān)注
關(guān)注
0文章
657瀏覽量
32852 -
Printf
+關(guān)注
關(guān)注
0文章
83瀏覽量
13649
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論