|
本帖最后由 清風(fēng)拂山崗~ 于 2023-4-18 14:10 編輯
1.1 USB-CDC虛擬串口概述
當(dāng)單片機(jī)需要和電腦之間進(jìn)行數(shù)據(jù)交換時(shí),首選一般都是串口通訊。1T 8051, STC8H8K64U單片機(jī)內(nèi)置USB控制器和收發(fā)器。
當(dāng)用戶代碼中嵌入U(xiǎn)SB-CDC代碼后,使用USB線將單片機(jī)與電腦直接相連接,在電腦端就可識別出【USB-CDC虛擬串口】,
【USB-CDC虛擬串口】就是【串口】, 就是【zui簡單zui強(qiáng)大的串口】
USB-CDC虛擬串口和傳統(tǒng)串口相比有如下優(yōu)點(diǎn):
Ø 數(shù)據(jù)傳輸更快: USB-CDC虛擬串口忽略傳統(tǒng)串口的波特率,傳輸速度的比特率即為全速USB的通訊速度12MBPS(即每秒12M位)
Ø 使用更簡單便捷:USB-CDC虛擬串口忽略傳統(tǒng)串口的起始位、停止位等冗余信息
Ø 數(shù)據(jù)傳輸更可靠:USB-CDC虛擬串口丟棄傳統(tǒng)串口簡單的軟件奇偶校驗(yàn)機(jī)制,USB-CDC虛擬串口數(shù)據(jù)傳輸時(shí)有USB硬件CRC校驗(yàn),
以及校驗(yàn)出錯(cuò)重傳機(jī)制,保證數(shù)據(jù)100%正確
Ø 自動緩存數(shù)據(jù): USB-CDC虛擬串口會自動緩存數(shù)據(jù)。單片機(jī)在沒有處理完成上位機(jī)下傳的上一筆數(shù)據(jù)時(shí),如果此時(shí)上位機(jī)又有新的數(shù)據(jù)下傳,
虛擬串口會自動將新的數(shù)據(jù)緩存,從而保證數(shù)據(jù)100%不會丟失或被覆蓋。
jpg.1.JPG (230.57 KB, 下載次數(shù): 23)
下載附件
2023-4-18 13:54 上傳
USB-CDC虛擬串口和傳統(tǒng)串口相比有如下優(yōu)點(diǎn):
Ø 數(shù)據(jù)傳輸更快: USB-CDC虛擬串口忽略傳統(tǒng)串口的波特率,傳輸速度的比特率即為全速USB的通訊速度12MBPS(即每秒12M位)
Ø 使用更簡單便捷:USB-CDC虛擬串口忽略傳統(tǒng)串口的起始位、停止位等冗余信息
Ø 數(shù)據(jù)傳輸更可靠:USB-CDC虛擬串口丟棄傳統(tǒng)串口簡單的軟件奇偶校驗(yàn)機(jī)制,USB-CDC虛擬串口數(shù)據(jù)傳輸時(shí)有USB硬件CRC校驗(yàn),
以及校驗(yàn)出錯(cuò)重傳機(jī)制,保證數(shù)據(jù)100%正確
Ø 自動緩存數(shù)據(jù): USB-CDC虛擬串口會自動緩存數(shù)據(jù)。單片機(jī)在沒有處理完成上位機(jī)下傳的上一筆數(shù)據(jù)時(shí),如果此時(shí)上位機(jī)又有新的數(shù)據(jù)下傳,
虛擬串口會自動將新的數(shù)據(jù)緩存,從而保證數(shù)據(jù)100%不會丟失或被覆蓋。
1.2 新建Keil項(xiàng)目并加入CDC模塊
2、下載完成后,從壓縮包中將“stc_usb_cdc_8h_data.lib”和“stc32_stc8_usb.h”解壓到項(xiàng)目目錄中
jpg.2.JPG (131.54 KB, 下載次數(shù): 26)
下載附件
2023-4-18 13:54 上傳
3、打開Keil軟件,并新建項(xiàng)目
jpg.3.jpg (66.07 KB, 下載次數(shù): 17)
下載附件
2023-4-18 13:54 上傳
jpg.4.jpg (47.94 KB, 下載次數(shù): 20)
下載附件
2023-4-18 13:54 上傳
Database請選擇“STC MCU Database”
5.jpg (8.67 KB, 下載次數(shù): 18)
下載附件
2023-4-18 13:54 上傳
單片機(jī)型號選擇“STC8H8K64U Series”
6.jpg (70.42 KB, 下載次數(shù): 21)
下載附件
2023-4-18 13:54 上傳
4、項(xiàng)目建立完成后,將下面的代碼命名為main.c文件并保存到項(xiàng)目目錄中
//測試工作頻率為24MHz
#include "stc8h.h"
#include "stc32_stc8_usb.h"
#define FOSC 24000000UL//ISP下載時(shí)需將工作頻率設(shè)置為24MHz
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#"; //不停電自動ISP下載命令
void main()
{
P_SW2|= 0x80;
P0M1= 0x00; P0M0 = 0x00;
P1M1= 0x00; P1M0 = 0x00;
P2M1= 0x00; P2M0 = 0x00;
P3M1= 0x00; P3M0 = 0x00;
P4M1= 0x00; P4M0 = 0x00;
P5M1= 0x00; P5M0 = 0x00;
P6M1= 0x00; P6M0 = 0x00;
P7M1= 0x00; P7M0 = 0x00;
P3M0&= ~0x03; //P3.0/P3.1和USB的D-/D+共用PIN腳,
P3M1|= 0x03; //需要將P3.0/P3.1設(shè)置為高阻輸入模式
IRC48MCR= 0x80; //使能內(nèi)部48M的USB專用IRC
while(!(IRC48MCR & 0x01));
USBCLK= 0x00; //設(shè)置USB時(shí)鐘源為內(nèi)部48M的USB專用IRC
USBCON= 0x90; //使能USB功能
usb_init(); //調(diào)用USB CDC初始化庫函數(shù)
IE2|= 0x80; //使能USB中斷
EA= 1;
while(DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
while(1)
{
if(bUsbOutReady) //當(dāng)硬件接收完成上位機(jī)通過串口助手發(fā)送數(shù)據(jù)后
//會自動將bUsbOutReady置1
//接收的數(shù)據(jù)字節(jié)數(shù)保存在OutNumber變量中
//接收的數(shù)據(jù)保存在UsbOutBuffer緩沖區(qū)
{
USB_SendData(UsbOutBuffer,OutNumber); //使用USB_SendData庫函數(shù)可向上位機(jī)發(fā)送數(shù)據(jù)
//這里的測試代碼為將接收數(shù)據(jù)原樣返回
usb_OUT_done(); //處理完成接收的數(shù)據(jù)后
//調(diào)用usb_OUT_done準(zhǔn)備接收下一筆數(shù)據(jù)
}
}
}
5、將項(xiàng)目目錄下的“main.c”和“stc_usb_cdc_32g.lib”加入到項(xiàng)目中
7.jpg (97.46 KB, 下載次數(shù): 25)
下載附件
2023-4-18 13:54 上傳
8.jpg (29.59 KB, 下載次數(shù): 20)
下載附件
2023-4-18 13:54 上傳
9.jpg (31.14 KB, 下載次數(shù): 23)
下載附件
2023-4-18 13:54 上傳
6、進(jìn)行項(xiàng)目設(shè)置
10.jpg (98.35 KB, 下載次數(shù): 19)
下載附件
2023-4-18 13:54 上傳
11.jpg (53.6 KB, 下載次數(shù): 25)
下載附件
2023-4-18 13:54 上傳
12.jpg (45.46 KB, 下載次數(shù): 23)
下載附件
2023-4-18 13:54 上傳
13.jpg (34.91 KB, 下載次數(shù): 20)
下載附件
2023-4-18 13:54 上傳
14.jpg (37.15 KB, 下載次數(shù): 21)
下載附件
2023-4-18 13:54 上傳
設(shè)置完成后,編譯通過即可生產(chǎn)目標(biāo)HEX文件
7、使用最新的STC-ISP下載軟件將HEX下載到目標(biāo)芯片
15.jpg (218.47 KB, 下載次數(shù): 24)
下載附件
2023-4-18 13:54 上傳
8、下載完成后,系統(tǒng)中就會出現(xiàn)一個(gè)STC USB-CDC串口
16.jpg (66.38 KB, 下載次數(shù): 22)
下載附件
2023-4-18 13:54 上傳
1.3 USB-CDC虛擬串口與電腦進(jìn)行數(shù)據(jù)傳輸
用STC-ISP軟件中的串口助手打開CDC串口,即可進(jìn)行數(shù)據(jù)收發(fā)測試
1.4 STC USB-CDC虛擬串口實(shí)現(xiàn)不停電自動ISP下載
由于我們在代碼中已經(jīng)定義了不停電自動ISP下載命令
17.jpg (37.29 KB, 下載次數(shù): 24)
下載附件
2023-4-18 13:54 上傳
我們只需要在下載軟件的“收到用戶命令后復(fù)位到ISP監(jiān)控程序區(qū)”中的進(jìn)行如下設(shè)置,即可實(shí)現(xiàn)不停電自動ISP下載功能了。
|
|