小記-STM8S003F3端口復(fù)用和端口開(kāi)漏
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1.軟件方面:
STM8S003F3端口可以設(shè)置重映射,如pin12的PC5管腳,默認(rèn)是SPI_SCK功能,可以重映射為T(mén)IM2_CH1,也就是timer2的1通道。映射方式并不像STM32那樣有個(gè)AFR寄存器來(lái)配置,而是配置Option bytes字節(jié),如下圖(芯片手冊(cè)的45頁(yè)):
也就是OPT2寄存器,注意是STM8S003F3系列的,其它的芯片配置字節(jié)是不一樣的。
比如要使用PC5的TIM2_CH2來(lái)做PWM輸出或PWM信號(hào)捕獲,按上圖中的AFR0那一欄所示,
AFR0 Alternate function remapping option 0
0:AFR0 remapping option inactive: Default alternate functions
1:Port C5 alternate function = TIM2_CH1;port C6 alternate function =
TIM1_CH1; port C7 alternate function = TIM1_CH2.
將AFR0設(shè)置為1時(shí)PC5將復(fù)用為T(mén)IM_CH1。
配置方法:
OPT2是個(gè)8位的寄存器,配置的方式比較特別,類似FLASH操作,有兩種方法配置,一種是通過(guò)STVP進(jìn)行配置,也就是通過(guò)ST的燒錄軟件界面那里配置;另一種是通過(guò)軟件配置方式,說(shuō)明下軟件配置,共4步:
#defineFLASH_EOP0X04//標(biāo)志位#defineFLASH_DUL0X08//標(biāo)志位voidFLASH_Init(void)//端口重映射初始化函數(shù),在此將PC5映射為T(mén)IM2_CH1{unsignedchar*flash_OPT2;unsignedchar*flash_NOPT2;flash_OPT2=(unsignedchar*)0x4803;//OPT2寄存器的ADDRflash_NOPT2=(unsignedchar*)0x4804;//NOPT2寄存器的ADDR,此寄存器的值是OPT2的取反值//-------------------------------------------------------------//第一步初始化FLASHwhile((FLASH_IAPSR&FLASH_DUL)==0X00){FLASH_DUKR=0XAE;FLASH_DUKR=0X56;}//一旦配置失敗,此處將陷入死循環(huán)。實(shí)際使用請(qǐng)加入超時(shí)機(jī)制,在此省略//-------------------------------------------------------------//第二步對(duì)OPT進(jìn)行編程,首先需要如下操作:開(kāi)啟opt編程FLASH_CR2"=0X80;//OPT=1FLASH_NCR2&=0X7F;//NOPT=0//-------------------------------------------------------------//第三步修改內(nèi)存1.修改參數(shù),啟用復(fù)用功能2.OPT2和NOPT2要相反//修改OPT2*flash_OPT2=0X01;//00000001AFR0=1,PC5復(fù)用為T(mén)IM2_CH1其它默認(rèn)清0while((FLASH_IAPSR&FLASH_EOP)==0);//等待操作完成//修改NOPT2*flash_NOPT2=~*flash_OPT2;while((FLASH_IAPSR&FLASH_EOP)==0);//等待操作完成//一旦配置失敗,此處將陷入死循環(huán)。實(shí)際使用請(qǐng)加入超時(shí)機(jī)制,在此省略//-------------------------------------------------------------//第四步對(duì)OPT進(jìn)行編程,最后需要如下操作:禁用opt編程FLASH_CR2&=~0X80;//OPT=1FLASH_NCR2|=0X80;//NOPT=0}
以上是配置函數(shù),經(jīng)過(guò)驗(yàn)證過(guò)可用,但使用過(guò)程中建議不要每次都進(jìn)行配置,因?yàn)槭菍?duì)配置字節(jié)的操作,如果單片機(jī)上電不穩(wěn)定會(huì)造成配置操作出現(xiàn)中斷而導(dǎo)致單片機(jī)鎖住問(wèn)題。解決方法是第一次運(yùn)行時(shí),配置完畢后將配置狀態(tài)寫(xiě)入FLASH某個(gè)地址,下次每次啟動(dòng)時(shí)讀取該FLASH地址狀態(tài)值,如果是已經(jīng)配置過(guò),則不需要再次配置。被鎖住后通過(guò)燒錄工具STVP進(jìn)行復(fù)位刷默認(rèn)配置即可。
以上是純軟件方式操作配置字節(jié)寄存器,另一種是通過(guò)STVP配置,如下圖:
通過(guò)修改紅色框中的參數(shù)進(jìn)行刷寫(xiě)修改。
2.硬件方面可能很容易疏忽的問(wèn)題就是STM8S003F3的PB4和PB5端口,這兩個(gè)端口分別是I2C通信的SCL和SDA端口,手冊(cè)明確說(shuō)明為:true open-drain I/O,也就是真正的開(kāi)漏輸出(手冊(cè)里端口說(shuō)明中帶‘T’),P-BUFFER和那個(gè)保護(hù)二極管是沒(méi)有使用的。這種情況下,如果沒(méi)接上拉電阻的話,是不能輸出高電平的。