案例一
有工程師提到:MM32F0010 的 PA13 和 PA14 引腳能否設(shè)置成GPIO?如何設(shè)置?
分析原因
PA13PA14 默認是 SWD 功能,并且可以設(shè)置成通用 GPIO 或其他復(fù)用功能,需要將 PA13PA14 的 SWD 功能進行 disable 才可以實現(xiàn) GPIO 功能。
解決辦法
設(shè)置方式:
void SWDasGPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE); GPIO_PinAFConfig(GPIOA,GPIO_PinSource14,GPIO_AF_4); GPIO_PinAFConfig(GPIOA,GPIO_PinSource13,GPIO_AF_4); GPIO_StructInit( GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, GPIO_InitStructure); }
案例二
有工程師提到:SWD 復(fù)用成 GPIO 后如何恢復(fù) SWD 功能并進行二次下載?
分析原因
PA13PA14被設(shè)置成 GPIO 或者其他復(fù)用功能后,如果需要再次通過 SWD 接口連接目標(biāo) MCU,需要做如下動作:
因為 PA14 被設(shè)置成 GPIO 或者其他復(fù)用功能后, 該 I/O 不再是 SWCLK 功能,但只要進入 RESET(內(nèi)部軟件復(fù)位,IWDG 復(fù)位,Standby 喚醒,初始上電等過程)會短時間還會把該 IO 切換為 SWCLK 功能,直到執(zhí)行 Main Flash 中的把該 Pin(nRST/PA14/SWCLK)功能配置為 GPIO 或 UART1_TXD 后,SWD 接口才會 Disable;
解決辦法 1
可通過 SWD 接口的 PA14和 PA13 輸入 Boot Switch 時序,切換到 ISP Boot,擦除目標(biāo) MCU 中 Main Flash 空間的程序,可以參考官網(wǎng)AN:《AN0010_MM32F0010_PIN_AF_Mode_Setting_SC》。
資料鏈接:https://www.mindmotion.com.cn/products/mm32mcu/mm32f/mm32f_value_line/mm32f0010/
本次以 MM32-LINK 為例,新建 MM32F0010 的工程后需要設(shè)置芯片鎖定解鎖狀態(tài),設(shè)置功能如下:
a) 當(dāng)編程對象為 MM32F0010 系列芯片鎖定時的解鎖狀態(tài)設(shè)定
b) 單擊鼠標(biāo)左鍵彈出對話框如右圖,設(shè)置解鎖重復(fù)次數(shù)和上電延時時間
c) 點擊按鍵[OK]按鍵后狀態(tài)欄顯示“Unlock”
d) 當(dāng)目標(biāo)對象被解鎖時, 狀態(tài)欄顯示“Normal”
單擊狀態(tài)欄的“Normal”在彈出的對話框中單擊OK,狀態(tài)欄從 Unlock 跳變到Normal 聽到滴兩聲,同時狀態(tài)欄內(nèi)核識別指示燈亮黃燈,說明解鎖成功,最后單擊 Erase Chip 聽到滴一聲解鎖完成,同時狀態(tài)欄顯示芯片擦除成功,內(nèi)核指示燈跳變成綠燈。
如果解鎖不成功,斷開仿真器與目標(biāo)板連接的燒錄線,單擊 Normal,在彈出的對話框中 Repeat 設(shè)置成500(該值依據(jù)具體情況可靈活修改),然后單擊 OK,仿真器再與目標(biāo)板連接并自動解鎖,狀態(tài)欄從Unlock跳變到 Normal 聽到滴兩聲,同時狀態(tài)欄內(nèi)核識別指示燈亮黃燈,說明解鎖成功,最后單擊 Erase Chip 聽到滴一聲解鎖完成,同時狀態(tài)欄顯示芯片擦除成功,內(nèi)核指示燈跳變成綠燈。
解決辦法 2
如果程序中進入 main()程序后,需要將 PA13 和 PA14 設(shè)置成 GPIO 功能時,可以預(yù)置較長時間的延時等待(在調(diào)試過程設(shè)置延時>10s,量產(chǎn)階段屏蔽延時),可通過重新上電 MCU,立刻執(zhí)行 Erase Chip 功能,擦除目標(biāo) MCU 中 Main Flash 空間的程序;
案例三
有工程師提到:使用 MM32-LINK 對 MM32F0010 下載,提示下載失敗?該如何設(shè)置?
分析原因
MM32-LINK 會通過 Vref 引腳檢查 MCU 的供電電壓,若Vref引腳未連接到主電源上,MM32-LINK 會認為目標(biāo) MCU 未供電且在下載時彈出相應(yīng)的錯誤提示。
解決辦法
硬件接線如下所示:
若 MM32F0010 未獨立供電,Keil 中需要配置 MM32-LINK 電源輸出,并且取消 Reset 的設(shè)置。
案例四
有工程師提到:MM32F0010 的 ADC 多通道采樣存在串?dāng)_是什么原因?
分析原因
MM32F0010 有 1 個 12 位模數(shù)轉(zhuǎn)換器,1uS 轉(zhuǎn)換時間(多達 8 個輸入通道),支持單次模式、單周期模式和連續(xù)模式,多通道采樣需要使用單周期或者連續(xù)模式。當(dāng) ADC 的采樣電容在兩個通道之間進行切換時等效電路如下所示:
兩路信號源 A 和 B 的電平分別為Ua和Ub,其內(nèi)阻分別是 Ra 和 Rb,其中,Cs 是 ADC 的采樣電容,Rs 是 ADC 的采樣電阻,MM32F0010 的內(nèi)部采樣電容 Cs 為 10pF。
為了簡化問題,假定兩路信號的掃描次序是由信號源 B 到信號源 A,且信號源 B 接入的時間足夠長,以至在通道切換時采樣電容 Cs 上的電壓可以近似的等于 Ub ,于是,在通道切換到信號源 A 后,采樣電容 Cs 上的電壓將會隨著時間進行充放電的動作,隨著采樣保持時間t 的增長,采樣電容 Cs 上的電壓逐漸趨近于 Ua ,而其與 Ua 之間的誤差 ?U 即是信號源 B 通過采樣電容 Cs 對信號源 A 的藕合值,且隨著采樣保持時間t的增長,該值逐漸減小,最終趨近于零。
解決辦法
在實際 ADC 轉(zhuǎn)換中,由于 ?U 的值的誤差最終會反饋在 ADC 最終的轉(zhuǎn)換結(jié)果中,所以有的用戶反饋轉(zhuǎn)換結(jié)果比實際結(jié)果存在偏差。我們在應(yīng)用中避免該問題,需要 ?U 的值趨近于 0 才符合實際的要求。
有種方法可以減小 ?U 的取值:
1. 通過增加采樣保持時間 t,使 ?U 獲得更多的衰減時間;
2. 通過減小信號源的內(nèi)阻 Ra,使 ?U 具有更快的衰減速率;
在實際運用時,在增加采樣保持時間方面可以通過修改 ADC 的設(shè)置參數(shù)來實現(xiàn)(通過調(diào)整 ADC 采樣率和 ADC 的采樣周期),而在降低信號源內(nèi)阻方面可以通過在信號源與 ADC 之間加入跟隨器進行隔離來實現(xiàn)。
案例五
有工程師提到:MM32F0010 功耗水平是多少?如何降低整機功耗?
分析原因
芯片有三種低功耗模式:
睡眠模式 (CPU 停止,所有外設(shè)包括 CPU 的外設(shè),如 NVIC、系統(tǒng)時鐘 (SysTick) 等仍在運行)
停機模式 (所有的時鐘都已停止,寄存器和 SRAM 的內(nèi)容依然保存)
待機模式 (內(nèi)核電源關(guān)閉,寄存器和 SRAM 的內(nèi)容全部丟失)
低功耗一覽表:
低功耗模式供應(yīng)電流:
解決辦法
在系統(tǒng)或電源復(fù)位以后,微控制器處于運行狀態(tài)。當(dāng) CPU 不需繼續(xù)運行時,可以利用多種低功耗模式來節(jié)省功耗,例如等待某個外部事件時。用戶需要根據(jù)最低電源消耗、最快速啟動時間和可用的喚醒源等條件,選定一個最佳的低功耗模式。
在運行模式下,可以通過以下方式中的一種降低功耗:
● 降低系統(tǒng)時鐘頻率
● 關(guān)閉 APB 和 AHB 總線上未被使用的外設(shè)時鐘
案例六
有工程師提到:MM32F0010 進入 STOP 模式后無法通過串口喚醒 ?
分析原因
MM32F0010 沒有 LPUART,進入 STOP 模式后不能直接通過 UART 直接喚醒,只能通過 EXTI 外部中斷方式喚醒。
解決辦法
我們可以在 MCU 進入 STOP 前將 RX 腳設(shè)為 EXTI 模式,并使能對應(yīng)的中斷來實現(xiàn)。
案例七
有工程師提到:MM32F0010 進入低功耗之后,實際功耗遠大于理想功耗,是什么原因?
分析原因
MCU 在進入 STOP 模式的時候,GPIO 的狀態(tài)都是保持在進入低功耗模式之前的狀態(tài)。當(dāng)連接到外設(shè)后,外設(shè)的電平狀態(tài)和所連接的 GPIO 不一致的時候,就會產(chǎn)生電流消耗,這個就是很多用戶實際測試過程中發(fā)現(xiàn)功耗大于手冊中的功耗。
解決辦法
1、進入低功耗之前,對使用和未使用IO狀態(tài)進行調(diào)整,比如有外部上拉,可配置成模擬輸入等。
2、關(guān)閉外設(shè)時鐘,例如 ADC、UART 等外設(shè)時鐘進行關(guān)閉。
案例八
有工程師提到:通過按鍵喚醒 MM32F0010,串口不能正常工作?
分析原因
經(jīng)分析發(fā)現(xiàn),開發(fā)者進入的低功耗模式為停機模式,喚醒之后,未初始化串口外設(shè),導(dǎo)致串口不能正常工作。
解決辦法
喚醒 MM32F0010 之后,重新初始化串口(以及所有使用的)外設(shè)。
案例九
有工程師提到:進入低功耗后無法使用調(diào)試器二次下載是什么原因?
分析原因
由于進入低功耗后會關(guān)閉 SWD 的電源域,所以無法二次下載。
解決辦法
● 在程序中需要設(shè)置正確的喚醒源,對 MCU 喚醒后才能進行下載。
● 可以參考問題2中的解決辦法對 MCU 內(nèi)部的程序進行擦除。
來源:靈動MM32MCU
-
芯片
+關(guān)注
關(guān)注
454文章
50430瀏覽量
421866 -
mcu
+關(guān)注
關(guān)注
146文章
17002瀏覽量
350326 -
GPIO
+關(guān)注
關(guān)注
16文章
1196瀏覽量
51920 -
SWD
+關(guān)注
關(guān)注
1文章
56瀏覽量
11812
發(fā)布評論請先 登錄
相關(guān)推薦
評論