在上一篇文章中,我實(shí)現(xiàn)了在keil中給梁山派移植RT-Thread Nano,但在官方的移植教程中,除了系統(tǒng)的移植,還有在 RT-Thread Nano 上添加UART控制臺(tái)與 FinSH的教程,所以我在本文中將實(shí)現(xiàn)在梁山派的Nano上添加UART控制臺(tái)。
文件信息如下
移植步驟如下:
1、打開(kāi)不含UART控制臺(tái)的文件,將梁山派的串口文件加到工程中,如下圖所示
在keil工程中雙擊Hardware文件夾,并在彈出的窗口中選中串口文件并添加進(jìn)工程中
添加完成后再將文件路徑添加到工程包含路徑中
然后我們?cè)賹⑿枰?a target="_blank">GD32F4庫(kù)函數(shù)文件加入工程,雙擊Firmware文件夾,找到
?02庫(kù)函數(shù)點(diǎn)燈FirmwareGD32F4xx_standard_peripheralSource
路徑下的gd32f4xx_misc.c和gd32f4xx_usart.c文件添加到工程中(方法與添加串口文件基本一致,這里不再贅述)
編譯無(wú)錯(cuò)
2、實(shí)現(xiàn)串口初始化
RT-Thread的控制臺(tái)需要通過(guò)uart_init實(shí)現(xiàn)串口初始化,在board.c文件中已經(jīng)搭好了基本框架,但是未開(kāi)啟
所以我們首先要在rtconfig.h 中使能 RT_USING_CONSOLE 宏定義(這個(gè)時(shí)候編譯有錯(cuò)是正常的)
然后在board.c文件中完善串口初始化函數(shù)uart_init
進(jìn)入bsp_usart.c文件
復(fù)制usart_gpio_config函數(shù)中的全部代碼,粘貼到board.c的uart_init函數(shù)中
/* 開(kāi)啟時(shí)鐘 /
rcu_periph_clock_enable(BSP_USART_TX_RCU); // 開(kāi)啟串口時(shí)鐘
rcu_periph_clock_enable(BSP_USART_RX_RCU); // 開(kāi)啟端口時(shí)鐘
rcu_periph_clock_enable(BSP_USART_RCU); // 開(kāi)啟端口時(shí)鐘
/ 配置GPIO復(fù)用功能 /
gpio_af_set(BSP_USART_TX_PORT,BSP_USART_AF,BSP_USART_TX_PIN);
gpio_af_set(BSP_USART_RX_PORT,BSP_USART_AF,BSP_USART_RX_PIN);
/ 配置GPIO的模式 /
/ 配置TX為復(fù)用模式 上拉模式 /
gpio_mode_set(BSP_USART_TX_PORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,BSP_USART_TX_PIN);
/ 配置RX為復(fù)用模式 上拉模式 /
gpio_mode_set(BSP_USART_RX_PORT, GPIO_MODE_AF,GPIO_PUPD_PULLUP,BSP_USART_RX_PIN);
/ 配置TX為推挽輸出 50MHZ /
gpio_output_options_set(BSP_USART_TX_PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,BSP_USART_TX_PIN);
/ 配置RX為推挽輸出 50MHZ /
gpio_output_options_set(BSP_USART_RX_PORT,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, BSP_USART_RX_PIN);
/ 配置串口的參數(shù) /
usart_deinit(BSP_USART); // 復(fù)位串口
usart_baudrate_set(BSP_USART,band_rate); // 設(shè)置波特率
usart_parity_config(BSP_USART,USART_PM_NONE); // 沒(méi)有校驗(yàn)位
usart_word_length_set(BSP_USART,USART_WL_8BIT); // 8位數(shù)據(jù)位
usart_stop_bit_set(BSP_USART,USART_STB_1BIT); // 1位停止位
/ 使能串口 /
usart_enable(BSP_USART); // 使能串口
usart_transmit_config(BSP_USART,USART_TRANSMIT_ENABLE); // 使能串口發(fā)送
usart_receive_config(BSP_USART,USART_RECEIVE_ENABLE); // 使能串口接收
/ 中斷配置 */
nvic_irq_enable(BSP_USART_IRQ, 2, 2); // 配置中斷優(yōu)先級(jí)
usart_interrupt_enable(BSP_USART,USART_INT_RBNE); // 讀數(shù)據(jù)緩沖區(qū)非空中斷和溢出錯(cuò)誤中斷
usart_interrupt_enable(BSP_USART,USART_INT_IDLE); // 空閑檢測(cè)中斷
在borad.c中添加頭文件,這一步是為了將bsp_usart.h中的一些宏定義引入,不然會(huì)報(bào)錯(cuò)
#include "bsp_usart.h"
最后再將下圖中是波特率修改為115200(這個(gè)就是控制臺(tái)串口的波特率,后面如果需要使用其他通信速率,可以來(lái)這里修改)
串口初始化完成
3、實(shí)現(xiàn) rt_hw_console_output
這個(gè)就相當(dāng)于串口輸出,實(shí)現(xiàn)了它,RT-Thread的串口輸出函數(shù)rt_kprintf才能夠使用
將下面代碼復(fù)制到rt_hw_console_output函數(shù)中去
rt_size_t i = 0, size = 0;
char a = 'r';
size = rt_strlen(str);
for (i = 0; i < size; i++)
{
if (*(str + i) == 'n')
{
usart_send_data((uint8_t)a);
}
usart_send_data((uint8_t)*(str + i));
}
復(fù)制前
復(fù)制后(編譯無(wú)錯(cuò))
以上就實(shí)現(xiàn)了在梁山派的Nano上添加UART控制臺(tái)(實(shí)現(xiàn)打印)
搞個(gè)例程試一試
在main函數(shù)的循環(huán)中添加
rt_kprintf("RT-Threadr");
例程現(xiàn)象如下:
總結(jié)如下:
在梁山派的Nano上添加UART控制臺(tái)
編寫(xiě)使用rt_kprintf函數(shù)串口打印的例程
-
控制器
+關(guān)注
關(guān)注
114文章
16959瀏覽量
182857 -
UART接口
+關(guān)注
關(guān)注
0文章
124瀏覽量
15725 -
串口中斷
+關(guān)注
關(guān)注
0文章
67瀏覽量
14236 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1368瀏覽量
41499
發(fā)布評(píng)論請(qǐng)先 登錄
梁山派GD32F450/470-RT-Thread Nano移植(一)

梁山派GD32F450/470-RT-Thread Nano移植(三)

rt-thread studio新建gd32f450工程

移植RT-Thread操作系統(tǒng)到GD32星空派開(kāi)發(fā)板
移植RT-Thread操作系統(tǒng)到GD32星空派開(kāi)發(fā)板
GD32F4系列芯片移植RTOS Demo工程 GD32F407移植FreeRTOS GD32F407移植RT-Thread
移植RT-Thread BSP中GDF450工程運(yùn)行在GD32F470芯片上失敗如何修改
GD32F450的開(kāi)發(fā)板工程RT系統(tǒng)啟動(dòng)錯(cuò)誤如何解決呢?
【國(guó)產(chǎn)MCU移植】HC32F460基于Keil MDK 移植 RT-Thread Nano

【國(guó)產(chǎn)MCU系列】在 HK32F030 上移植 RT-Thread Nano

【國(guó)產(chǎn)MCU系列】在 HK32F030 上移植 RT-Thread Nano

基于 Keil MDK 移植 RT-Thread Nano

評(píng)論