近日,某工程師用STM32F103C8開發(fā)產(chǎn)品,用到TIM3的PWM輸出功能。他發(fā)現(xiàn)TIM3_CH2可以實(shí)現(xiàn)PWM【此通道對(duì)應(yīng)的GPIO腳是PB5】;而TIM3_CH1卻不能實(shí)現(xiàn)PWM【此通道對(duì)應(yīng)的GPIO腳是PB4】。 該工程師在基于ST官方之前提供的標(biāo)準(zhǔn)外設(shè)固件庫做應(yīng)用軟件設(shè)計(jì)。
從客戶的描述來看,基本可以肯定TIM3的時(shí)鐘、GPIOB的時(shí)鐘都已正確使能了。關(guān)于TIM3_CH1的PWM初始化代碼應(yīng)該不會(huì)有啥問題,除非偶爾的筆誤沒發(fā)現(xiàn)。后來一起查看了相關(guān)PWM初始化代碼也的確沒發(fā)現(xiàn)問題。
PB5腳對(duì)應(yīng)的TIM3_CH2可以實(shí)現(xiàn)PWM,而PB4對(duì)應(yīng)的TIM3_CH1卻無法實(shí)現(xiàn)PWM。懷疑該腳是否還有其它的復(fù)用了?蛻粽f,PB4他只用來做PWM輸出,并無其它功能安排,硬件線路上也無其它連接。
打開芯片數(shù)據(jù)手冊(cè),查看PB4的管腳說明如下:
從這里可以看出,PB4腳的復(fù)位后的主功能是個(gè)特定功能腳,是JTAG口的一個(gè)復(fù)位腳。如果要用做TIM3_CH1的話得先做REMAP操作才可以。
經(jīng)與客戶工程師溝通,他的確也做了相關(guān)REMAP操作,而且REMAP是沒問題的。因?yàn)镻B5也是經(jīng)過同一REMAP操作后才能成為TIM3_CH2通道的。
既然REMAP沒問題,那應(yīng)該是別的原因。詢問該工程師是否使用JTAG調(diào)試口,答曰用SWD口,只涉及PBA13/PA14,根本沒用到PB4。
查看STM32F1參考手冊(cè)可以發(fā)現(xiàn)PB4及PA13\PA14\PA15\PB3等5個(gè)腳在芯片復(fù)位后默認(rèn)的就是專用的調(diào)試口,非通用GPIO,F(xiàn)在客戶工程師雖然用SWD接口,只用到PA13\PA14兩根線,但PB4及PA15、PB3三根線的屬性沒變,還是專用調(diào)試口。如果要把不用的PB4等三根線作為GPIO,還得額外做些相關(guān)寄存器配置,即操作AFIO_MAPR寄存器中的SWJ_CFG【2:0】三個(gè)位。
讓客戶工程師在程序代碼里添加有關(guān)AFIO_MAPR寄存器的配置代碼后,測(cè)試基于PB4腳的TIM3_CH1的PWM輸出功能,一切正常?磥恚瑔栴}就出在跟調(diào)試口復(fù)用的GPIO腳釋放問題上。即對(duì)于復(fù)位后呈現(xiàn)專用調(diào)試口的功能腳,欲部分或全部用在GPIO,得額外通過相關(guān)軟件代碼配置來修改其屬性,將相關(guān)管腳釋放為GPIO。
STM32 MCU芯片管腳復(fù)用之靈活而復(fù)雜是其一特色,增強(qiáng)了管腳使用與安排的靈活性。也正因?yàn)檫@個(gè)靈活,經(jīng)常有人會(huì)因?yàn)楣苣_復(fù)用的安排遇到些小麻煩。像類似問題,在數(shù)據(jù)手冊(cè)里各個(gè)管腳的復(fù)用功能都一一列出了,然后逐一核對(duì)有無多重使用問題也不難找到原因。
不過,如果使用ST公司的STM32CubeMx圖形化配置工具來做管腳安排及時(shí)鐘初始化等就可以避免很多類似上面談到的繁瑣或麻煩。利用STM32CubeMx配置工具,很多初始化的東西都可以依據(jù)你的管腳和時(shí)鐘安排、外設(shè)功能的使能等而生成出相應(yīng)的配置代碼,不必手動(dòng)二次添加配置,讓你去專注你的用戶應(yīng)用代碼設(shè)計(jì)與調(diào)試。
比方是以上面事例來談,關(guān)于TIM3的功能腳的REMAP、JTAG腳的配置以及項(xiàng)目中用到的各外設(shè)的時(shí)鐘使能、相關(guān)GPIO的配置等都可自動(dòng)生成,不會(huì)出現(xiàn)配置代碼方面丟這個(gè)少那個(gè)的問題,使用起來給開發(fā)者帶來了不少方便,節(jié)省了不少時(shí)間。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |