RT-Thread Studio版本: 2.2.5,RT-Thread v4.1.0 ,
新建RTthread STM32F407VGT6項目。打開CUBEMAX配置調試口,外部時鐘,串口1(控制臺),串口3,串口開啟中斷,生成代碼。
刪除掉原來的serial.c; serial.h; serialV2.c; serialV2.h;
drv_uart.c; drv_uart.h; drv_uart_V2.c; drv_uart_V2.h;
并使用serialX.c; serialX.h; drv_usartX.c; drv_usartX.h 替換
修改/rt-thread[4.1.0]/components/drivers路徑下的Kconfig文件,找到if RT_USING_SERIAL修改一段代碼,使setting頁面可以配置serialX。
if RT_USING_SERIAL
choice
prompt "Choice Serial version"
default RT_USING_SERIAL_X
config RT_USING_SERIAL_X
bool "RT_USING_SERIAL_X"
endchoice
config RT_SERIAL_USING_DMA
bool "Enable serial DMA mode"
default n
endif
4.修改/rt-thread[4.1.0]/components/drivers/serial 文件夾下的SConscript文件代碼,以使用serialX.c文件
from building import *
cwd = GetCurrentDir()
CPPPATH = [cwd + '/../include']
group = []
if GetDepend(['RT_USING_SERIAL']):
if GetDepend(['RT_USING_SERIAL_X']):
src = Glob('serialX.c')
group = DefineGroup('DeviceDrivers', src, depend = ['RT_USING_SERIAL_X'], CPPPATH = CPPPATH)
Return('group')
5.找到rt_device.h文件的SERIAL部分,修改代碼,使之可以包含serialX.h 文件。
#ifdef RT_USING_SERIAL
#ifdef RT_USING_SERIAL_X
#include "drivers/serialX.h"
#endif
#endif /* RT_USING_SERIAL */
6.打開uart_config.h文件,找到#define UART1_CONFIG部分刪除掉結構體中.tx_pin_name和 .rx_pin_name成員。而且后續使用哪個串口就必須修改相對應的結構體宏定義。
7.打開drv_usartX.c文件,按需求增加自己所需要的串口代碼
比如用到串口3中斷,不使用DMA, 則需要添加串口3 中斷函數。
#if defined(BSP_USING_UART3)
void USART3_IRQHandler(void)
{
/* enter interrupt /
rt_interrupt_enter();
uart_isr(&(uart_obj[UART3_INDEX].serial));
/ leave interrupt /
rt_interrupt_leave();
}
#endif / BSP_USING_UART3 */
8.找到drv_common.c文件的串口部分,修改代碼
#ifdef RT_USING_SERIAL
#ifdef RT_USING_SERIAL_X
#include "drv_usartX.h"
#endif /* RT_USING_SERIAL /
#endif / RT_USING_SERIAL_X */
9.使用下載來的文件替換掉rtdef.h文件,并且將新的文件中rt_mutex結構體定義中的value成員的注釋關掉
10.打開components.c文件,修改rit_end函數
這里必須修改,否則控制臺shell線程不會自啟動
static int rti_end(void)
{
return 0;
}
INIT_EXPORT(rti_end, "7.end");
11.如果關于serialX的相關文件已經按以上步驟修改了,但是依找不到文件,可以嘗試在setting中更新配置(比如開關串口DMA選項)。
board.h中添加
#define BSP_USING_UART1
#define BSP_USING_UART3
main函數中打開串口
rt_device_open(u3_dev, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX | RT_DEVICE_OFLAG_NONBLOCKING);
完成!
-
dma
+關注
關注
3文章
561瀏覽量
100587 -
UART接口
+關注
關注
0文章
124瀏覽量
15294 -
串口中斷
+關注
關注
0文章
64瀏覽量
13898 -
RT-Thread
+關注
關注
31文章
1289瀏覽量
40135 -
STM32F407VGT6
+關注
關注
0文章
3瀏覽量
4201
發布評論請先 登錄
相關推薦
評論