0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RT-thread STM32F103 USB虛擬串口配置步驟

冬至子 ? 來源:浪花雷雨 ? 作者:浪花雷雨 ? 2023-10-27 12:32 ? 次閱讀

RT-thread STM32F103 USB虛擬串口配置

一、使用的環(huán)境
硬件環(huán)境:
芯片STM32F103VET6,外部晶振8M,USB電路接口如下圖,USB做從設(shè)備時(shí),D+引腳要上拉到高電平,這里控制PA8引腳輸出低電平即可使能D+為高電平。

1.jpg

軟件環(huán)境:
代碼編輯和編譯軟件:RT-Thread Studio 1.1.2;RTOS:rt-thread4.0.2;Windows的串口驅(qū)動(dòng):VCP_V1.4.0_Setup.exe

二、移植修改過程
(一)基礎(chǔ)工程的創(chuàng)建
1.項(xiàng)目工程創(chuàng)建
選擇RT-Thread Studio的文件->新建->RT-Thread項(xiàng)目
1.jpg

2.選擇保存的目錄,選擇使用的芯片,選擇串口及引腳,選擇下載工具
1.jpg

3.生成的工程使用內(nèi)部時(shí)鐘(在drv_clk.c文件中),往串口輸出信息,這個(gè)工程可以直接編譯下載到芯片中校驗(yàn)工程的正確性。
1.jpg

(二)使用CubeMX生成時(shí)鐘配置和外設(shè)配置
1.在CubeMX中選擇使用的STM32F103VE芯片創(chuàng)建工程
1.jpg

2.選擇RCC項(xiàng)為外部高速時(shí)鐘為晶振;選擇USB項(xiàng)打開使能,選擇USB的IP包;設(shè)置時(shí)鐘頻率,主時(shí)鐘設(shè)置為73Mhz,USB時(shí)鐘設(shè)置為48Mhz,cubeMX自動(dòng)計(jì)算分頻系數(shù)。
1.jpg

2.jpg

3.jpg

3.設(shè)置工程選項(xiàng),生成工程代碼。
1.jpg

(三)RT-thread工程修改
1.時(shí)鐘配置修改
從CubeMX工程的main.c文件中拷貝SystemClock_Config函數(shù)的內(nèi)容覆蓋RT-Thred studio工程drv_clk.c文件中的SystemClock_Config函數(shù)中的內(nèi)容,讓時(shí)鐘能使用外部晶振。
1.jpg

2.進(jìn)行RTOS內(nèi)核配置,保存。
1.jpg

3.因?yàn)镾TM32F103的時(shí)鐘要單獨(dú)打開,在drv_clk.c文件中的SystemClock_Config函數(shù)中增加USB的時(shí)鐘使能,在stm32f1xx_hal_conf.h打開HAL庫的USB相關(guān)代碼編譯選項(xiàng)。
1.jpg

2.jpg

4.配置驅(qū)動(dòng)
打開rtconfig.h文件,在USB驅(qū)動(dòng)配置的地方增加USB設(shè)備的BSP定義選項(xiàng)和D+上拉電平控制引腳(從drv_gpio.c中按照對應(yīng)的管腳查到對應(yīng)的控制編號,如果D+已經(jīng)接到搞電平可以不用添加這個(gè)控制),修改USB_VENDOR_ID 為0x0483,修改USB_PRODUCT_ID為 0x5740(需改這兩項(xiàng)才可以使用ST提供的Windows虛擬串口驅(qū)動(dòng),否則設(shè)備被識別為其他設(shè)備)
1.jpg

2.jpg

3.jpg

5.main.c函數(shù)修改
/ 用于接收消息的信號量 /
static struct rt_semaphore rx_sem;
static rt_device_t serial;

/ 接收數(shù)據(jù)回調(diào)函數(shù) /
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
{
/ 串口接收到數(shù)據(jù)后產(chǎn)生中斷,調(diào)用此回調(diào)函數(shù),然后發(fā)送接收信號量 /
rt_sem_release(&rx_sem);

return RT_EOK;
}
static void serial_thread_entry(void parameter)
{
char ch;
while (1)
{
/ 從串口讀取一個(gè)字節(jié)的數(shù)據(jù),沒有讀取到則等待接收信號量 /
while (rt_device_read(serial, -1, &ch, 1) != 1)
{
/ 阻塞等待接收信號量,等到信號量后再次讀取數(shù)據(jù) /
rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
}
/ 讀取到的數(shù)據(jù)通過串口錯(cuò)位輸出 */
rt_device_write(serial, 0, &ch, 1);
}
}
int main(void)
{
int count = 1;
int err = 0;
rt_thread_t tid;
char buf[] = “hello rt-thread!rn”;
serial = rt_device_find(“vcom”);
if (!serial)
{
rt_kprintf(“find failed!n”);
return RT_ERROR;
}
err = rt_device_init(serial);
if (!serial)
{
rt_kprintf(“find failed!n”);
return RT_ERROR;
}
err = rt_device_open(serial, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX);

//初始化信號量
rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
// 設(shè)置接收回調(diào)函數(shù)
rt_device_set_rx_indicate(serial, uart_input);
rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10);
if (thread != RT_NULL)
{
rt_thread_startup(thread);
}
while (count++)
{
rt_device_write(serial, 0, buf, rt_strlen(buf));
LOG_D("Hello RT-Thread!");
rt_thread_mdelay(1000);
}
return RT_EOK;
}
5.測試收發(fā),串口工具要打開DTR控制
1.jpg

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • USB接口
    +關(guān)注

    關(guān)注

    9

    文章

    699

    瀏覽量

    55538
  • RTOS
    +關(guān)注

    關(guān)注

    21

    文章

    809

    瀏覽量

    119363
  • 虛擬串口
    +關(guān)注

    關(guān)注

    3

    文章

    60

    瀏覽量

    13855
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1261

    瀏覽量

    39843
  • STM32F103VET6
    +關(guān)注

    關(guān)注

    12

    文章

    18

    瀏覽量

    15547
收藏 人收藏

    評論

    相關(guān)推薦

    RT-Thread實(shí)現(xiàn)USB虛擬串口的過程記錄

    記錄——基于 RT-Thread 實(shí)現(xiàn) USB 虛擬串口記錄一下我在正點(diǎn)原子 F429 阿波羅開發(fā)板上實(shí)現(xiàn)
    發(fā)表于 01-26 06:31

    RT-thread STM32F103 USB虛擬串口移植修改過程

    工程drv_clk.c文件中的SystemClock_Config函數(shù)中的內(nèi)容,讓時(shí)鐘能使用外部晶振。2.進(jìn)行RTOS內(nèi)核配置,保存。3.因?yàn)?b class='flag-5'>STM32F103的時(shí)鐘要單獨(dú)打開,在drv_clk.c文件
    發(fā)表于 08-01 15:41

    STM32F103RT-Thread怎樣設(shè)置串口1.5 個(gè)停止位呢?

    STM32F103RT-Thread怎樣設(shè)置串口1.5 個(gè)停止位呢?求大神解答
    發(fā)表于 04-17 15:52

    RT-Thread STM32 配置指南

    105,STM32F107 則叫做 CL 系列,所以當(dāng)您使用 RT-Thread 時(shí),請先確定您使用的芯片型號,在軟件的配置上主要是兩 個(gè)地方(在工程的選項(xiàng)中): 在上圖中選擇左邊的芯片型號,例如
    發(fā)表于 09-12 15:13 ?24次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>STM32</b> <b class='flag-5'>配置</b>指南

    記錄——基于 RT-Thread 實(shí)現(xiàn) USB 虛擬串口

    記錄——基于 RT-Thread 實(shí)現(xiàn) USB 虛擬串口記錄一下我在正點(diǎn)原子 F429 阿波羅開發(fā)板上實(shí)現(xiàn)
    發(fā)表于 12-02 17:21 ?6次下載
    記錄——基于 <b class='flag-5'>RT-Thread</b> 實(shí)現(xiàn) <b class='flag-5'>USB</b> <b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>

    RT-Thread Studio 實(shí)現(xiàn)USB虛擬串口/STM32開發(fā)板

    有限制,最快在20Hz左右,因此想到USB虛擬串口功能。一、在RT-Thread Studio軟件中打開CubeMx使能單片機(jī)的USB注意
    發(fā)表于 12-08 15:21 ?6次下載
    <b class='flag-5'>RT-Thread</b> Studio 實(shí)現(xiàn)<b class='flag-5'>USB</b><b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>/<b class='flag-5'>STM32</b>開發(fā)板

    RT-Thread系統(tǒng)移植到STM32f103

    RT-Thread系統(tǒng)移植到STM32f103
    發(fā)表于 12-09 12:51 ?26次下載
    <b class='flag-5'>RT-Thread</b>系統(tǒng)移植到<b class='flag-5'>STM32f103</b>

    RT-Thread STM32 配置系統(tǒng)時(shí)鐘(使用外部晶振)

    RT-Thread STM32 配置系統(tǒng)時(shí)鐘開發(fā)環(huán)境芯片:STM32F103RCT6RT-Thread Studio: V1.0.6(現(xiàn)在已經(jīng)更新到1.1.3,由于本人使用RTT開發(fā)已
    發(fā)表于 12-14 18:45 ?14次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>STM32</b> <b class='flag-5'>配置</b>系統(tǒng)時(shí)鐘(使用外部晶振)

    筆記:基于RT-thread初步了解rtos,利用Keil 模擬器 STM32F103 上手指南。

    文章參考:RT-Thread 文檔中心前期準(zhǔn)備MDK-ARM 5.24 點(diǎn)擊下載STM32F103 軟件仿真,STM32F103 pack 文件 點(diǎn)擊下載RT-Thread Simul
    發(fā)表于 01-12 17:38 ?6次下載
    筆記:基于<b class='flag-5'>RT-thread</b>初步了解rtos,利用Keil 模擬器 <b class='flag-5'>STM32F103</b> 上手指南。

    基于 Keil MDK 移植 RT-Thread Nano

    本文介紹如何基于 Keil MDK 移植 RT-Thread Nano ,并以一個(gè) stm32f103 的基礎(chǔ)工程作為示例進(jìn)行講解。 RT-Thread Nano 已集成在 Keil MD...
    發(fā)表于 01-26 17:04 ?16次下載
    基于 Keil MDK 移植 <b class='flag-5'>RT-Thread</b> Nano

    基于 RT-ThreadSTM32 上實(shí)現(xiàn) USB 虛擬串口

    之前由于工作需要,基于 RT-ThreadSTM32 上實(shí)現(xiàn)了 USB 虛擬串口。為了方便大家,我在這里把在正點(diǎn)原子
    發(fā)表于 02-10 10:01 ?4次下載
    基于 <b class='flag-5'>RT-Thread</b> 在 <b class='flag-5'>STM32</b> 上實(shí)現(xiàn) <b class='flag-5'>USB</b> <b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>

    基于 RT-ThreadSTM32 上實(shí)現(xiàn) USB 虛擬串口

    之前由于工作需要,基于 RT-ThreadSTM32 上實(shí)現(xiàn)了 USB 虛擬串口。為了方便大家,我在這里把在正點(diǎn)原子
    發(fā)表于 02-10 10:28 ?9次下載
    基于 <b class='flag-5'>RT-Thread</b> 在 <b class='flag-5'>STM32</b> 上實(shí)現(xiàn) <b class='flag-5'>USB</b> <b class='flag-5'>虛擬</b><b class='flag-5'>串口</b>

    RT-Thread文檔_Keil 模擬器 STM32F103 上手指南

    RT-Thread文檔_Keil 模擬器 STM32F103 上手指南
    發(fā)表于 02-22 18:22 ?4次下載
    <b class='flag-5'>RT-Thread</b>文檔_Keil 模擬器 <b class='flag-5'>STM32F103</b> 上手指南

    RT-Thread文檔_野火霸道 STM32F103 上手指南

    RT-Thread文檔_野火霸道 STM32F103 上手指南
    發(fā)表于 02-22 18:23 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_野火霸道 <b class='flag-5'>STM32F103</b> 上手指南

    RT-Thread文檔_正點(diǎn)原子 nano STM32F103 上手指南

    RT-Thread文檔_正點(diǎn)原子 nano STM32F103 上手指南
    發(fā)表于 02-22 18:24 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_正點(diǎn)原子 nano <b class='flag-5'>STM32F103</b> 上手指南