娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32F745 USART1 Bootloader失敗原因分析與解決

發布者:pi26最新更新時間:2024-09-13 來源: elecfans關鍵字:USART1  Bootloader 手機看文章 掃描二維碼
隨時隨地手機看文章

1. 概述

STM32 的 Bootloader 可以支持多種協議的,比如 USART,I2C,DFU 等等,USARTBootloader 是客戶使用 STM32 的時候常常會用到的協議。客戶在使用 STM32F745 進行產品開發的時候,出現了使用 STM32CubeProgramer 無法通過 USART1 Bootloader 進行程序升級的問題。為了解決客戶的問題,我在 NUCLEO-F746ZG 開發板上,復現了同樣的現象,本文針對這個現象,分析了該問題的原因和解決方法,作為一個記錄。


2. 問題分析

STM32F745/6 USART1 Bootloader 使用的 TX 和 RX 分別是 PA9 和 PA10。而NUCLEO-F746ZG 開發板,默認情況下,板子上的 PA9 和 PA10 被用作 USB Vbus 和USB ID, 需要斷開板子上的 SB127 和 SB125 才能讓 PA9 和 PA10 被 USART1 使用。使用 STM32CubeProgrammer 下載工具,通過 USB-Serial 轉接板連上 NUCLEOF746ZG,如圖 1 所示,選擇 USART 協議,選擇對應的 USART1 端口,其它參數選用默認配置,然后連接 NUCLEO 開發板,結果出現連接失敗。對照著 UM1974,檢查連線沒有問題,確認了 BOOT 腳為高電平,MCU 也進入Bootloader 模式,同時參考 AN2606,確認 STM32F475/6 支持 USART1 Bootloader。測試 USART3 Bootloader,STM32CubeProgrammer 可以正常連接。

93cb91b2-9267-11ed-bfe3-dac502259ad0.png

參考 AN3155 了解 UART Bootloader 的工作流程如圖 2,果斷使用串口終端,比較USART1 Bootloader 和 USART3 Bootloader 響應上位機的命令有何區別。

93f3495a-9267-11ed-bfe3-dac502259ad0.png

使用串口終端工具,分別連接 USART1,USART3,發送對應的 UART Bootloader 命令,得到下圖 3 的命令交互。

圖3.USART1 Bootloader Command Interaction

940207ba-9267-11ed-bfe3-dac502259ad0.png

通過圖 3 的命令交互可以看出,當 USART1 Bootloader 收到 7F 命令的時候,返回的值是 FF 79,正常的情況下,應該返回 79。命令 7F 的作用是選擇對應的 USART Bootloader,返回 79 表示 MCU 正確的進入了 USART Bootloader 工作模式,在 USART1 Bootloader 中,STM32CubeProgrammer 發送 7F 命令收到的返回值是 FF 79,所以STM32CubeProgrammer 認為此時 MCU 沒有正確的進入 USART Bootloader 模式,因此連不上目標板。

顯然,這個多余的 FF 不應該是 Bootloader 發出來的,通過示波器,觀察 USART1TX 的 PA9 發現,復位芯片之后,PA9 為低電平,而根據參考手冊,當 USART1 使能之后,此時 USART TX 應該為高電平才正常,所以懷疑這個異常現象是 USART1 產生了錯誤的數據導致的。

針對這種現象,在 PA9 外部上拉,再進行測試,USART1 Bootloader 工作正常。

3. 問題解決

根據上面的分析,USART1 TX 沒有上拉導致了 USART1 Bootloader 無法正常工作,但通常情況下,我們使用 USART 的時候,TX,RX 是無需外加上拉的,為什么STM32F745/6 的 USART1 需要上拉,而 USART3 無需上拉呢?帶著這個問題,仔細閱讀了相關文檔,最終再 AN2606 V5.1(之前版本沒有注明)版本中,發現了這個區別,正是這個區別導致了這個問題。

941617f0-9267-11ed-bfe3-dac502259ad0.png

4.總結

通過分析和解決這個問題,可見及時更新并仔細閱讀相關文檔是很重要的事情。針對這個問題,如果仔細閱讀了最新的 AN2606,就能很快定位產生問題的原因。當然,通過逐步分析這個問題,也進一步加深了對 Bootloader 的理解。


關鍵字:USART1  Bootloader 引用地址:STM32F745 USART1 Bootloader失敗原因分析與解決

上一篇:都是32位MCU,ESP32、GD32、STM32有什么區別
下一篇:STM32使用片內外設DFSDM的應用問題

推薦閱讀最新更新時間:2025-04-19 09:55

STM32的 USART1 用 DMA 方式發送與接收
USART1的DMA發送比較簡單,在要發送之前,重新設置好DMA_BufferSize的大小,然后啟動DMA就行了。不過在設置這一值時,得先關閉DMA通道。代碼如下: DMA_ClearFlag(DMA1_FLAG_TC4); //清DMA發送完成標志 DMA_Cmd(DMA1_Channel4, DISABLE); //停止DMA DMA1_Channel4- CNDTR = sizeof(TxBuffer1) / sizeof(TxBuffer1 );//重設傳輸長度 DMA_Cmd(DMA1_Channel4, ENABLE); //啟動DMA USART1的DMA接收:如果向USART1發
[單片機]
STM32 Bootloader異常復位如何解決
問題描述 客戶反饋通過PC軟件Flashloader不能夠跟STM32 MCU自帶Bootloader連接。并且系統運行一段時間后異常復位。 系統分析 檢測原理圖 延續之前的項目,進行的一些軟硬件簡單修改。 上電、放電的時序也是正常。 BOOT0 拉高,BOOT1 拉低, 測量工作時的電壓正常(2.5v)。 檢測所有相關的硬件軟件都是沒有問題,他們的BOOT腳,以及之前的PDR_ON是通過外圍的FPGA單元控制,我們一開始懷疑這些上電時序,以及PDR邏輯出錯。嘗試讓他們全部斷開邏輯,測試整個上電,掉電過程都是沒有什么問題。 測量波形 檢測他們的串口工具 能正常在PC上發現他們的串口工具,數據的發送正常。 但是串口的到PCB
[單片機]
STM32 <font color='red'>Bootloader</font>異常復位如何解決
S5PV210開發系列三_簡易Bootloader的實現
Bootloader是嵌入式系統上電后第一段運行的代碼。對于功能簡單的處理器,可能并沒有Bootloader的概念,但對于應用處理器,有不同的啟動方式。不同的存儲設備(Nand flash、sd/mmc、DDR2、SRAM等)。不同的操作系統等,往往須要一個Bootloader先初始化CPU和相關的硬件,建立內存空間映射,把內核或應用程序載入到對應的內存運行位置。最后調用內核或應用程序,釋放CPU控制權,完畢整個Bootloader的流程。 筆者此處就S5PV210的Bootloader實現作一個簡單的介紹。 1. Bootloader流程 Bootloader是嚴重依賴于詳細硬件實現的,同樣CPU內核架構。不同廠商生產的處理器其
[單片機]
S5PV210開發系列三_簡易<font color='red'>Bootloader</font>的實現
基于S3C6410的ARM11學習(十八) 移植printf和scanf
在學c語言的時候,經典的hello world程序,是通過printf函數實現了。有了這個函數,就可以隨意的向屏幕打印數據了。在嵌入式中,其實也是可以用printf函數的,不過需要稍微麻煩點的移植。畢竟,在嵌入式中,所有實現的都要自己來弄,不在向PC程序開發一樣,很多庫函數,操作系統已經搞好,就用就行了。 首先,是要去下載能實現printf的源代碼。這里用的是國嵌提供的。有兩個文件夾,一個include,里面一些頭文件,另外一個lib,實現printf的需要的額外的程序。 中間的是inlcude中的頭文件,下邊是lib中的文件。 在lib中有一個Makefile。這個Makefile
[單片機]
基于S3C6410的ARM11學習(十八) 移植printf和scanf
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 大邑县| 潢川县| 建德市| 岳阳县| 铁岭县| 行唐县| 宜春市| 连州市| 乐业县| 正蓝旗| 根河市| 馆陶县| 咸丰县| 徐水县| 梅州市| 沾化县| 嵩明县| 安徽省| 蒙自县| 仪征市| 凯里市| 穆棱市| 潮州市| 莱西市| 福安市| 木兰县| 左权县| 怀柔区| 黔西| 禹州市| 佛山市| 保康县| 宣城市| 桦甸市| 科技| 稻城县| 蕲春县| 景东| 汉源县| 鹤壁市| 闻喜县|