| 移植準(zhǔn)備
1、去托管平臺(tái)把源碼下下來;
2、準(zhǔn)備一個(gè)基礎(chǔ)工程,實(shí)現(xiàn)串口重定義輸出:
|移植源碼
1、把核心源碼復(fù)制到工程中:
2、把命令示例源碼復(fù)制到工程中:
3、把源碼添加到工程中:
4、屏蔽RT-Thread 的頭文件:
5、修改輸出的末尾行模式:
6、初始化nr_micro_shell:
#include "gd32f10x.h" #include "stdio.h" #include "nr_micro_shell.h" // uart配置 void hal_log_init(void) { /* 使GPIO時(shí)鐘 */ rcu_periph_clock_enable(RCU_GPIOA); /* 使USART時(shí)鐘 */ rcu_periph_clock_enable(RCU_USART0); /* 連接端口到USARTx_Tx */ gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9); /* 連接端口到USARTx_Rx */ gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10); /* USART配置 */ usart_deinit(USART0); /*!< 復(fù)位外設(shè)USART */ usart_word_length_set(USART0, USART_WL_8BIT); /*!< 配置USART字長 */ usart_stop_bit_set(USART0, USART_STB_1BIT); /*!< 配置USART停止位 */ usart_parity_config(USART0, USART_PM_NONE); /*!< 配置USART奇偶校驗(yàn) */ usart_baudrate_set(USART0, 115200U); /*!< 配置USART波特率 */ usart_receive_config(USART0, USART_RECEIVE_ENABLE); /*!< USART/UART接收器配置 */ usart_transmit_config(USART0, USART_TRANSMIT_ENABLE); /*!< USART/UART發(fā)送器配置 */ usart_enable(USART0); /*!< 使能USART */ /*中斷管理器使能,并分配優(yōu)先級(jí)*/ nvic_irq_enable(USART0_IRQn, 1, 0); /*清除中斷標(biāo)志*/ usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE); ?? usart_interrupt_flag_clear(USART0,?USART_INT_FLAG_IDLE); ?? /*?使能串口中斷?*/ usart_interrupt_enable(USART0, USART_INT_RBNE); /*!< 接收不為空中斷 */ } // usart0中斷 void USART0_IRQHandler(void) { if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) { /* 清除標(biāo)志位 */ usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE); /* 接收數(shù)據(jù)(注意) */ shell(usart_data_receive(USART0)); } } //printf重定向函數(shù) int fputc(int ch,FILE *f) { usart_data_transmit(USART0, (uint8_t)ch); //發(fā)送一字節(jié)數(shù)據(jù) while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)); //等待發(fā)送完成 return ch; } // 外設(shè)初始化 void hal_device_init(void) { hal_log_init(); /* 初始化 */ ?? shell_init(); } // 主循環(huán) int main(void) { // 設(shè)置優(yōu)先級(jí)組 nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0); // 外設(shè)初始化 hal_device_init(); while (1) { } }
7、查看效果:
| 定義指令
1、添加自定義指令代碼:
2、查看效果:
| 最終效果
移植成功后就可以在MCU中體驗(yàn)Linux的shell命令那種感覺,注意一定要修改輸出的末尾行模式,不然會(huì)不能正常使用,來感受一下最終效果:
最終的效果還是不錯(cuò)的,和Linux的體驗(yàn)類似,感興趣的同學(xué)可以移植來體驗(yàn)一下MCU級(jí)別的shell命令交互。
審核編輯:劉清
-
嵌入式
+關(guān)注
關(guān)注
5085文章
19138瀏覽量
305706 -
串口中斷
+關(guān)注
關(guān)注
0文章
64瀏覽量
13923 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1293瀏覽量
40195 -
USART串口
+關(guān)注
關(guān)注
0文章
32瀏覽量
6853
原文標(biāo)題:通俗|嵌入式命令行交互工具
文章出處:【微信號(hào):玩轉(zhuǎn)單片機(jī),微信公眾號(hào):玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論