1. 概述
STM32 的 Bootloader 可以支持多種協(xié)議的,比如 USART,I2C,DFU 等等,USARTBootloader 是客戶(hù)使用 STM32 的時(shí)候常常會(huì)用到的協(xié)議。客戶(hù)在使用 STM32F745 進(jìn)行產(chǎn)品開(kāi)發(fā)的時(shí)候,出現(xiàn)了使用 STM32CubeProgramer 無(wú)法通過(guò) USART1 Bootloader 進(jìn)行程序升級(jí)的問(wèn)題。為了解決客戶(hù)的問(wèn)題,我在 NUCLEO-F746ZG 開(kāi)發(fā)板上,復(fù)現(xiàn)了同樣的現(xiàn)象,本文針對(duì)這個(gè)現(xiàn)象,分析了該問(wèn)題的原因和解決方法,作為一個(gè)記錄。
2. 問(wèn)題分析
STM32F745/6 USART1 Bootloader 使用的 TX 和 RX 分別是 PA9 和 PA10。而NUCLEO-F746ZG 開(kāi)發(fā)板,默認(rèn)情況下,板子上的 PA9 和 PA10 被用作 USB Vbus 和USB ID, 需要斷開(kāi)板子上的 SB127 和 SB125 才能讓 PA9 和 PA10 被 USART1 使用。使用 STM32CubeProgrammer 下載工具,通過(guò) USB-Serial 轉(zhuǎn)接板連上 NUCLEOF746ZG,如圖 1 所示,選擇 USART 協(xié)議,選擇對(duì)應(yīng)的 USART1 端口,其它參數(shù)選用默認(rèn)配置,然后連接 NUCLEO 開(kāi)發(fā)板,結(jié)果出現(xiàn)連接失敗。對(duì)照著 UM1974,檢查連線沒(méi)有問(wèn)題,確認(rèn)了 BOOT 腳為高電平,MCU 也進(jìn)入Bootloader 模式,同時(shí)參考 AN2606,確認(rèn) STM32F475/6 支持 USART1 Bootloader。測(cè)試 USART3 Bootloader,STM32CubeProgrammer 可以正常連接。
參考 AN3155 了解 UART Bootloader 的工作流程如圖 2,果斷使用串口終端,比較USART1 Bootloader 和 USART3 Bootloader 響應(yīng)上位機(jī)的命令有何區(qū)別。
使用串口終端工具,分別連接 USART1,USART3,發(fā)送對(duì)應(yīng)的 UART Bootloader 命令,得到下圖 3 的命令交互。
圖3.USART1 Bootloader Command Interaction
通過(guò)圖 3 的命令交互可以看出,當(dāng) USART1 Bootloader 收到 7F 命令的時(shí)候,返回的值是 FF 79,正常的情況下,應(yīng)該返回 79。命令 7F 的作用是選擇對(duì)應(yīng)的 USART Bootloader,返回 79 表示 MCU 正確的進(jìn)入了 USART Bootloader 工作模式,在 USART1 Bootloader 中,STM32CubeProgrammer 發(fā)送 7F 命令收到的返回值是 FF 79,所以STM32CubeProgrammer 認(rèn)為此時(shí) MCU 沒(méi)有正確的進(jìn)入 USART Bootloader 模式,因此連不上目標(biāo)板。
顯然,這個(gè)多余的 FF 不應(yīng)該是 Bootloader 發(fā)出來(lái)的,通過(guò)示波器,觀察 USART1TX 的 PA9 發(fā)現(xiàn),復(fù)位芯片之后,PA9 為低電平,而根據(jù)參考手冊(cè),當(dāng) USART1 使能之后,此時(shí) USART TX 應(yīng)該為高電平才正常,所以懷疑這個(gè)異常現(xiàn)象是 USART1 產(chǎn)生了錯(cuò)誤的數(shù)據(jù)導(dǎo)致的。
針對(duì)這種現(xiàn)象,在 PA9 外部上拉,再進(jìn)行測(cè)試,USART1 Bootloader 工作正常。
3. 問(wèn)題解決
根據(jù)上面的分析,USART1 TX 沒(méi)有上拉導(dǎo)致了 USART1 Bootloader 無(wú)法正常工作,但通常情況下,我們使用 USART 的時(shí)候,TX,RX 是無(wú)需外加上拉的,為什么STM32F745/6 的 USART1 需要上拉,而 USART3 無(wú)需上拉呢?帶著這個(gè)問(wèn)題,仔細(xì)閱讀了相關(guān)文檔,最終再 AN2606 V5.1(之前版本沒(méi)有注明)版本中,發(fā)現(xiàn)了這個(gè)區(qū)別,正是這個(gè)區(qū)別導(dǎo)致了這個(gè)問(wèn)題。
4.總結(jié)
通過(guò)分析和解決這個(gè)問(wèn)題,可見(jiàn)及時(shí)更新并仔細(xì)閱讀相關(guān)文檔是很重要的事情。針對(duì)這個(gè)問(wèn)題,如果仔細(xì)閱讀了最新的 AN2606,就能很快定位產(chǎn)生問(wèn)題的原因。當(dāng)然,通過(guò)逐步分析這個(gè)問(wèn)題,也進(jìn)一步加深了對(duì) Bootloader 的理解。
審核編輯:湯梓紅
-
STM32
+關(guān)注
關(guān)注
2266文章
10876瀏覽量
354923 -
串口
+關(guān)注
關(guān)注
14文章
1547瀏覽量
76229 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
4959瀏覽量
97214 -
bootloader
+關(guān)注
關(guān)注
2文章
234瀏覽量
45557 -
USART1
+關(guān)注
關(guān)注
0文章
9瀏覽量
3670
原文標(biāo)題:STM32F745 USART1 Bootloader 失敗原因分析與解決
文章出處:【微信號(hào):mcugeek,微信公眾號(hào):MCU開(kāi)發(fā)加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論