㈠ stm8s103k3 的晶元 反匯編的 匯編程序 怎麼編譯
建工程文件,用ST Visual Develop進行編譯,編譯出來的文件與原文件完全一樣就可以了
㈡ STM8當中的GPIO各模式如何用
TM8的通用輸入/輸出口用於晶元和外部進行數據傳輸。一個IO埠可以包括多達8個引腳,每個引腳可以被獨立編程作為數字輸入或者數字輸出口。另外部分口還可能會有如模擬輸入,外部中斷,片上外設的輸入/輸出等復用功能。但是在同一時刻僅有一個復用功能可以映射到引腳上。
復用功能的映射是通過選項位元組控制的。請參考數據手冊關於選項位元組的描述。
每個埠都分配有一個輸出數據寄存器,一個輸入引腳寄存器,一個數據方向寄存器,一個選擇寄存器,和一個配置寄存器。一個I/O口工作在輸入還是輸出是取決於該口的數據方向寄存器的狀態。
GPIO主要功能
可選擇的輸入模式:浮動輸入和帶上拉輸入
可選擇的輸出模式:推挽式輸出和開漏輸出
數據輸入和輸出採用獨立的寄存器
外部中斷可以單獨使能和關閉
輸出擺率控制用以減少EMC雜訊
片上外設的I/O功能復用
當作為模擬輸入時可以關閉輸入施密特觸發器來降低功耗
在數據輸出鎖存時支持讀-修改-寫
輸入兼容5V電壓
I/O口工作電壓范圍為1.6 V到VDDIOmax
I/O的配置和使用
每一個埠都有一個輸出數據寄存器(ODR),一個引腳輸入寄存器(IDR)和一個數據方向寄存器(DDR)總是同相關的。
控制寄存器1(CR1)和控制寄存器2(CR2)用於對輸入/輸出進行配置。任何一個I/O引腳可以通過對DDR,ODR,CR1和CR2寄存器的相應位進行編程來配置。
寄存器中的位n對應於口的引腳n。各種不同配置總結如表18。
(表18:IO口配置表)
注意:連接VDD的二極體在實際開漏極狀態引腳是無效的,在引腳和VOL之間的局部保護設備重要性是有效的。
沒有使用的I/O引腳必須連接到一個固定的電平值。或者是上拉或者是下拉。
輸入模式
將DDRx位清零就選擇了輸入模式。在該模式下讀IDR寄存器的位將返回對應I/O引腳上的電平值。
如表18所示,理論上STM8可以通過軟體配置得到四種不同的輸入模式:懸浮不帶中斷輸入,懸浮帶中斷輸入,上拉不帶中斷輸入和上拉帶中斷輸入。但是在實際情況下不是所有的口都具有外部中斷能力和上拉,用戶應參考數據手冊中關於每個引腳的實際硬體性能描述來了解更多細節。
輸出模式
將DDRx位置1就選擇了輸出模式。在該模式下向ODR寄存器的位寫入數據將會通過鎖存器輸出對應數字值到I/O口。讀IDR的位將會返回相應的I/O引腳電平值。通過軟體配置CR1,CR2寄存器可以得到不同的輸出模式:上拉輸出,開漏輸出。
低功耗模式
表19低功耗模式對STM8S的GPIO口的影響
模式 描述
等待(Wait) 對I/O口無影響。外部中斷可以使MCU退出等待(Wait)模式
停機(Halt) 對I/O口無影響。外部中斷可以使MCU從停機(Halt)模式喚醒
注意:如果PA1/PA2被用來連接外部諧振器,為了確保在HALT模式下有最低功耗必須配置PA1和PA2為帶上拉輸入。
㈢ stm8s的EEPROM讀寫程序如何編寫,需要哪些配置步驟
#define EEPMASS1 0xAE //密碼鑰匙1
#define EEPMASS2 0x56 //密碼鑰匙2
#define EEPADDR 0x4000 //eep地址起始
void eeprom_read(U16 u16Addr, U8 *pdatas, U8 len)
{
U8 *eep=(U8 *)u16Addr;
U8 j;
for(j=0; j<len; j++)
{
pdatas[j]=eep[j];
}
}
void eep_word_write(U16 u16Addr, U8 *pdatas, U8 len)
{
U8 *eep=(U8*)u16Addr;
U8 j;
FLASH_DUKR=EEPMASS1; //鎖1密鑰
FLASH_DUKR=EEPMASS2; //鎖2密鑰
while(!(FLASH_IAPSR&0x08)); //等待解密就緒
DISABLE_MAC_INTERRUPTS();
FLASH_CR2 |= 0x40; //
FLASH_NCR2 &= ~0x40; //設置字編程
for(j=0; j<len; j++)
{
eep[j] = pdatas[j];
}
while(!(FLASH_IAPSR&0x04));
FLASH_IAPSR &=0xf7; // off the eeprom program
ENABLE_MAC_INTERRUPTS();
}