- 文章作者:Wendell
- 原文地址:http://www.reibang.com/p/7d8ec9a37f11
- 轉(zhuǎn)載請注明出處!
說明:
- 開發(fā)環(huán)境:keil MDK V5.21.1.0
- 硬件平臺:STM32F429-apollo開發(fā)板(正點原子)
- Env工具:env_released_0.7.1
- RT-Thread版本: 3.1.1
- 本文以RT-Thread官網(wǎng)的AN0001 RT-Thread串口應(yīng)用指南為依據(jù),在STM32F429-apollo開發(fā)板上進(jìn)行相應(yīng)實驗。
配置工程
??在工程目錄下右擊挠阁,選擇ConEmu Here,打開Env工具。??在Env 命令行中輸入menuconfig运挫,進(jìn)入配置界面,使用menuconfig工具配置工程套耕。操作方法如下:
??瀏覽各選項谁帕,熟悉結(jié)構(gòu),確定以下3處設(shè)置正確冯袍,路徑在圖片左上角紅框內(nèi)匈挖。(官方bsp已經(jīng)將串口配置好了,所以應(yīng)該不需要修改康愤,使用默認(rèn)配置即可儡循。)
??為了加快編譯速度,也為了避免帶來不必要的影響征冷,將LWIP和SAL相關(guān)功能刪除择膝,具體配置如下圖:
??在這里提一個小技巧,Env工具支持自動補(bǔ)全检激,按Tab鍵即可肴捉。例如要求“在 env 命令行中輸入 menuconfig”,我們輸入men之后按Tab呵扛,則出現(xiàn)完整的menuconfig命令每庆;要求“輸入命令scons”,我們輸入sco之后按Tab今穿,則出現(xiàn)完整的scons命令缤灵。
串口輸出與官方教程中差別很大娶吞,主要有以下3點:
- 輸出內(nèi)容比官方教程多出了各模塊啟動情況。
- 官方教程顯示的為msh械姻,而該程序輸出為finsh妒蛇,輸入list_device,返回的輸出與官方教程不一致楷拳。
- 如果使用官方教程中的串口調(diào)試助手putty绣夺,則無法接收到輸出。
??第1點是因為apollo的bsp默認(rèn)打開了宏RT_USING_COMPONENTS_INIT欢揖,這個宏負(fù)責(zé)輸出具體的初始化過程陶耍,不管輸出成功還是失敗暫時不用管它。
??第3點是因為stm32f429-Apollo開發(fā)板的USB-232的串口(即uart1)只能使用原子哥的XCOM V2.0接收,其它串口調(diào)試助手測試了SecureCRT 8.3沉桌、realterm谢鹊、PuTTY都無法接收。原因是正點原子的開發(fā)板的復(fù)位電路和串口相連留凭,導(dǎo)致使用其它串口調(diào)試助手時開發(fā)板無法正常復(fù)位佃扼,而使用正點原子的XCOM V2.0是由于軟件在打開串口的時候先發(fā)送了復(fù)位信號。(開發(fā)板中另外兩路使用DB9插頭的串口可以正常使用各種軟件0埂) ??重新使用Evn配置后兼耀,保存,退出求冷,輸入命令 scons --target=mdk5 -s 重新生成工程瘤运,編譯下載后可以看到出口輸出如下,與官方教程中一直匠题,成功拯坟!
加入代碼
??打開rt-thread學(xué)習(xí)準(zhǔn)備一文中下載的“RT-Thread應(yīng)用筆記資料(STM32F429阿波羅)”,在“串口數(shù)據(jù)應(yīng)用筆記”文件夾下有代碼 文件app_uart.c韭山、 app_uart.h郁季,將這兩個文件拷貝到項目文件夾stm32f429-apollo\applications目錄下冷溃。
??Env工具是通過SConscript文件來組織文件的,手動添加的文件會在下次使用Env工具時被刪除梦裂,因此修改SConscript文件才是正確的添加方法似枕!使用notepad++打開applications文件夾中的SConscript文件,并按照圖中位置添加app_uart.c塞琼,保存后退出菠净。
??使用Env命令行重新生成工程并打開,可以看到app_uart.c已經(jīng)成功添加到application目錄下
??在application.c文件添加有文件
#include "app_uart.h"
??使用如下函數(shù)代替application.c文件的rt_application_init()函數(shù)
int rt_application_init(void)
{
rt_thread_t tid;
tid = rt_thread_create("init",
rt_init_thread_entry, RT_NULL,
2048, RT_THREAD_PRIORITY_MAX/3, 20);
if (tid != RT_NULL)
rt_thread_startup(tid);
tid = rt_thread_create("uart",
uart_thread_entry,
RT_NULL,
1024,
2,
10);
/* 創(chuàng)建成功則啟動線程 */
if (tid != RT_NULL)
rt_thread_startup(tid);
return 0;
}
??編譯下載彪杉,打開兩個串口調(diào)試助手XCOM V2.0和Realterm(不用putty的原因上文已經(jīng)解釋)毅往,按照自己計算機(jī)顯示的com口編號配置串口助手(串口2記得連接電腦呀),開發(fā)板上電后派近,在Realterm中輸入EmbededLife攀唯,每個字符輸入后會顯示比該字符ASCII碼大1的字符,兩個串口調(diào)試助手的顯示如下:
打完收工