一、實(shí)驗(yàn)環(huán)境
- 硬件:stm32f103c8t6核心板
- 軟件:STM32CubeMX 6.6.1
- keil5 mdk
二、STM32CubeMX的安裝
這里就不再詳細(xì)介紹了,詳細(xì)請(qǐng)參考上一篇博客:
https://blog.csdn.net/qq_55894922/article/details/127232999?spm=1001.2014.3001.5501
三、使用STM32CubeMX完成串口通信
1. 安裝固件庫(kù)
若點(diǎn)擊 Manage embedded software packages 后,出現(xiàn)失敗,則需要隨便點(diǎn)擊其它任一選項(xiàng),進(jìn)行下載一些文件,比如點(diǎn)擊 file->new project ,等下載后,在進(jìn)行安裝固件庫(kù)。
選擇自己開(kāi)發(fā)板的固件庫(kù),我這里是F1的
2.工程設(shè)置
1.點(diǎn)擊file->new project建立工程
2.搜索型號(hào),選擇合適的型號(hào)進(jìn)行工程建立
3.進(jìn)行系統(tǒng)調(diào)試及基準(zhǔn)時(shí)鐘配置。點(diǎn)擊 System Core下拉欄中的SYS。選擇debug調(diào)試接口。選擇 serial Wire
SW模式就選擇serial Wire。JTAG模式就選擇JTAG,4pin和5pin的區(qū)別多了一個(gè)復(fù)位引腳stlink調(diào)試就是SW模式,jlink調(diào)試就是JTAG模式
4.進(jìn)行時(shí)鐘RCC選項(xiàng)配置。點(diǎn)擊 System Core下拉欄中的RCC??梢远歼x外部晶振Crystal/Ceramic Resonator,第二個(gè)LSE也可以不設(shè)置,沒(méi)有影響。
BYPASS Clock Source(旁路時(shí)鐘源)
Crystal/Ceramic Resonator(石英/陶瓷 晶振)
5.進(jìn)行系統(tǒng)具體時(shí)鐘配置。點(diǎn)擊“ Clock Configuration”選項(xiàng)欄進(jìn)入時(shí)鐘樹(shù)配置界面。
選擇外部時(shí)鐘HSE 8MHz
PLL鎖相環(huán)倍頻9倍(8*9=72)
系統(tǒng)時(shí)鐘來(lái)源選擇為PLL
設(shè)置APB1分頻器為 /2
6.設(shè)置串口。這里選擇USART1。串口配置的引腳為 PA9、PA10。
第3步中 設(shè)置MODE為 異步通信(Asynchronous)
第4步中參數(shù)設(shè)置 波特率為115200 Bits/s,傳輸數(shù)據(jù)長(zhǎng)度為8 Bit,奇偶檢驗(yàn)無(wú),停止位1。以及下面未顯示出的 接收和發(fā)送都使能
7.設(shè)置完成后,點(diǎn)擊Project Manager 選項(xiàng),進(jìn)入工程設(shè)置界面,選擇 Project 選項(xiàng)。
注:不管工程名稱(chēng)還是路徑都不要有中文,否則后面編譯文件會(huì)出錯(cuò)。
Project Name:工程名稱(chēng)
Project Location:點(diǎn)擊后面的"Browse"選擇你想要將生成的工程保存到哪個(gè)目錄里面。
Application Structure:應(yīng)用程序結(jié)構(gòu)
Basic:是基礎(chǔ)的結(jié)構(gòu),一般不包含中間件(RTOS、文件系統(tǒng)、USB設(shè)備等)
Advanced:相反就是包含中間件,一般針對(duì)相對(duì)復(fù)雜一點(diǎn)的工程。
Toolchain/IDE:根據(jù)你用的編譯軟件進(jìn)行選擇 使用KEIL就選擇keil的對(duì)應(yīng)版本。不要高于版本,其他默認(rèn)。
8.點(diǎn)擊Code Generator ,勾選Generated files第一個(gè)
- copy all used libraries into the project folder:復(fù)制所有庫(kù)文件(不管工程需要用到還是沒(méi)用到)到生成的工程目錄中,此做法可以使在不使用Cubemx或者電腦沒(méi)有安裝cubemx,依然可以按照標(biāo)準(zhǔn)庫(kù)的編程習(xí)慣調(diào)用HAL庫(kù)函數(shù)進(jìn)行程序編寫(xiě)。
2.Copy only the necessary library files: 只復(fù)制必要的庫(kù)文件。這個(gè)相比上一個(gè)減少了很多文件。比如你沒(méi)有使用CAN、SPI…等外設(shè),就不會(huì)拷貝相關(guān)庫(kù)文件到你工程下。
3.Add necessary library files as reference in the toolchain project configuration file :在工具鏈項(xiàng)目配置文件中添加必要的庫(kù)文件作為參考。這里沒(méi)有復(fù)制HAL庫(kù)文件,只添加了必要文件(如main.c)。相比上面,沒(méi)有Drivers相關(guān)文件。
4.Generate peripheral initialization as a pair of’.c/.h’ files per peripheral:每個(gè)外設(shè)生成獨(dú)立的.C .H文件,方便獨(dú)立管理。不勾:所有初始化代碼都生成在main.c 勾選:初始化代碼生成在對(duì)應(yīng)的外設(shè)文件。 如UART初始化代碼生成在uart.c中。
5.Backup previously generated files when re-generating:在重新生成時(shí)備份以前生成的文件。重新生成代碼時(shí),會(huì)在相關(guān)目錄中生成一個(gè)Backup文件夾,將之前源文件拷貝到其中。
6.keep user code when re-generating:重新生成代碼時(shí),保留用戶(hù)代碼(前提是代碼寫(xiě)在規(guī)定的位置。也就是生成工程文件中的BEGIN和END之間。否則同樣會(huì)刪除。后面會(huì)根據(jù)生成的工程進(jìn)行說(shuō)明)
7.delete previously generated files when not re-generated:刪除以前生成但現(xiàn)在沒(méi)有選擇生成的文件 比如:之前生成了led.c,現(xiàn)在重新配置沒(méi)有l(wèi)ed.c,則會(huì)刪除之前的led.c文件。(此功能根據(jù)自身要求進(jìn)行取舍)
9.點(diǎn)擊 GENERATE CODE 生成代碼。然后打開(kāi)工程
10.編譯代碼。編譯無(wú)誤
四、USART串口通信
1. UART函數(shù)庫(kù)介紹
結(jié)構(gòu)體以及函數(shù)定義均在頭文件: stm32f1xx_hal_uart.h
- UART結(jié)構(gòu)體定義
UART_HandleTypeDef huart1;
- 串口發(fā)送/接收函數(shù)
HAL_UART_Transmit():串口發(fā)送數(shù)據(jù),使用超時(shí)管理機(jī)制
HAL_UART_Receive():串口接收數(shù)據(jù),使用超時(shí)管理機(jī)制
HAL_UART_Transmit_IT():串口中斷模式發(fā)送
HAL_UART_Receive_IT():串口中斷模式接收
HAL_UART_Transmit_DMA():串口DMA模式發(fā)送
HAL_UART_Transmit_DMA():串口DMA模式接收
串口發(fā)送數(shù)據(jù):
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
功能:串口發(fā)送指定長(zhǎng)度的數(shù)據(jù)。如果超時(shí)沒(méi)發(fā)送完成,則不再發(fā)送,返回超時(shí)標(biāo)志(HAL_TIMEOUT)。
參數(shù):
- *UART_HandleTypeDef huart:UART結(jié)構(gòu)體( huart1)
- *pData:需要發(fā)送的數(shù)據(jù)
- Size:發(fā)送的字節(jié)數(shù)
- 最大發(fā)送時(shí)間,發(fā)送數(shù)據(jù)超過(guò)該時(shí)間退出發(fā)送
舉例:
HAL_UART_Transmit(&huart1, (uint8_t *)"diyu", 4, 0xffff); //串口發(fā)送4個(gè)字節(jié)數(shù)據(jù),最大傳輸時(shí)間0xfff
2.代碼編寫(xiě)
在文件 main.c中的while循環(huán)里添加代碼
while (1)
{
/* USER CODE END WHILE */
//添加下面兩行代碼
HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!\r\n", 16 , 0xffff);
HAL_Delay(1000); //延時(shí)1s
/* USER CODE BEGIN 3 */
}
3.調(diào)試結(jié)果
注:波特率、停止位、數(shù)據(jù)位、校驗(yàn)位要與配置的一致
編譯,將程序燒錄或下載進(jìn)核心板,打開(kāi)串口助手查看接收到的數(shù)據(jù)。
五、軟件調(diào)試
1.點(diǎn)擊魔法棒,設(shè)置debug。勾選Use Simulator 使用軟件調(diào)試。更改 Dialog DLL 以及 Parameter
Dialog DLL 設(shè)置為 DARMSTM.DLL 和 TARMSTM.DLL
Parameter 都設(shè)置為 -pSTM32F103C8 (后面跟的是芯片型號(hào))
2.點(diǎn)擊方框內(nèi),開(kāi)始調(diào)試,并打開(kāi)logic analyzer窗口,進(jìn)行波形分析
3.點(diǎn)擊 Setup 選項(xiàng),點(diǎn)擊藍(lán)色方框,輸入USART1_SR,類(lèi)型設(shè)置為比特流,并可以選擇設(shè)置波形顏色。設(shè)置完就可以點(diǎn)擊下方 Close 退出了
4.點(diǎn)擊編譯
5.查看波形
六、總結(jié)
本次實(shí)驗(yàn)用STM32CubeMX實(shí)現(xiàn)了USART串口通信,總的來(lái)說(shuō)比自己寫(xiě)簡(jiǎn)單,這也是HAL庫(kù)的便捷之處。
七、參考資料
https://blog.csdn.net/qq_45945548/article/details/120984961?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166565631116782412574363%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166565631116782412574363&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~pc_rank_34-3-120984961-null-null.142v56pc_rank_34_1,201v3add_ask&utm_term=STM32CubeMX%E5%AE%9E%E7%8E%B0USART%E4%B8%B2%E5%8F%A3%E9%80%9A%E4%BF%A1&spm=1018.2226.3001.4187
https://blog.csdn.net/ybhuangfugui/article/details/94363188文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-416556.html
https://blog.csdn.net/as480133937/article/details/99073783文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-416556.html
到了這里,關(guān)于STM32CubeMX實(shí)現(xiàn)USART串口通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!