本人從新學者的角度積累了一些STM8S207這個8位微控制器的心得體會
STM8S學習筆記 
SWIM 引腳除了作為調試接口,還可以作為普通的 I/O 口使用,用戶使用過程中,如果既想 將這個管腳作為調試腳,又想作為普通 I/O 腳,安全的做法是做 PCB 時加一個跳線,通過跳線的連接來切換功能。建議在 SWIM 管腳加一個 4.7K 的上拉電阻,以保證調試時數據的可靠性 
STM8S 除了通過 SWIM 接口來下載程序,有些型號還支持通過UART 接口來下載 
我們選擇了 PB3、PD3、PD7 作為三個用戶按鍵的接口。電路中的三個電阻和電容為硬件防抖,這樣 程序設計中就不用進行軟件防抖處理 USB轉TTL電路的 USB 接口 
浮動輸入:是 GPIO 的管腳的電平狀態是不確定的,容易受到外部電平的干擾 上拉輸入:管腳的電平則只有高電平或低電平兩種確定的狀態。一般 I/O 做外部中斷輸入時要設置為上拉輸入,做 A/D 轉換時要設置為浮動輸入 推挽輸出:推挽輸出方式能夠獨立的輸出高電平和低電平,適合驅動數字器件; 開漏輸出:開漏輸出可以穩定的輸出低電平,能承受大的灌電流,但是開漏輸出無法輸出高電平,需要外接上拉電阻才可以輸出高電平,輸出的高電平則有外接的上拉電平決定,這種輸出方式適合做電流型驅動。 做按鍵輸入時為了能夠準確的得到鍵值,我們應當將相應 GPIO 口設置為帶上拉輸入或者在 GPIO 外部增加一個外部上拉電阻 GPIO口操作 1)使用寄存器來操作 端口 X 輸出數據寄存器 Px_ODR—存放端口要輸出的數據 端口 X 輸入寄存器 Px_IDR—存放引腳的狀態值,此寄存器只讀 端口 X 數據方向寄存器 Px_DDR—設置端口的輸入/輸出, 某位被設置為1時,對應管腳為輸出模式;當某位被設置為0 時,對應的管腳為輸入模式 端口 X 控制寄存器 1 Px_CR1—設置端口輸入模式、輸出模式 在端口為輸入模式下,設置端口的上拉模式:0—浮空輸入;1—帶內部弱上拉輸入; 在端口為輸出模式下,設置端口為開漏輸出或推挽輸出: 0—模擬開漏輸出;1—推挽輸出; 端口 X 控制寄存器 2 Px_CR2—設置端口中斷開關及輸出擺率 在端口為輸入模式下,設置端口的中斷: 0—禁止外部中斷;1—使能外部中斷; 在端口為輸出模式下,設置端口的輸出擺率: 0— 低速擺率,輸出速度最大2M;1—快速擺率,輸出速度最大10M PC_DDR|=0x08;這句代碼用來將PC_DDR寄存器的[3]位置位,而不影響寄存器的其他位,這句代碼實質上是將 PC_DDR寄存器的值與0x08進行或操作,然后再賦值給 PC_DDR寄存器 PC_ODR&=0xF7;//PC_ODR 第4位清零,輸出低電平,在程序中出現的&=也是嵌入式 C 語言中比較常用的位操作方式,它用來將某位清零,而不影響寄存器的其他位。這句代碼實質上是將 PC_DDR寄存器的值與0x08進行與操作,然后再賦值給 PC_DDR 寄存器。 PC_ODR^=0x08;這一句代碼即可實現前述的2 句代碼的功能,它是對寄存器某位的值進行取反操作 
PC_ODR_ODR3^=1,對PC3取反 與 GPIO 輸出有關的函數有(GPIO 的庫函數文件 stm8s_gpio.c) GPIO_Init:GPIO 端口初始化; GPIO_Write:設置整個端口輸出值; GPIO_WriteHigh:設置某個管腳輸出高電平; GPIO_WriteLow:設置某個管腳輸出低電平; GPIO_WriteReverse:翻轉某個管腳這些功能; 時鐘系統
外部時鐘信號直接接STM8 單片機的OSCIN 管腳,OSCOUT 則可以節省下來做GPIO使用 當 STM8S 單片機復位之后,默認將 HSI 的 8 分頻作為系統主時鐘,2MHz 的 HSI 時鐘信號可以保證系統在即使 VDD 較差的情況下也能正常啟動,HSI為16Mhz的一個RC震蕩時鐘。 LSI可以作為在停機模式下維持獨立看門狗和自動喚醒單元的低功耗時鐘源。 使用庫函數來切換時鐘 CLK_ClockSwitchCmd:啟動或關閉時鐘切換 CLK_ClockSwitchConfig:系統時鐘切換配置 CLK_GetSYSCLKSource:獲取系統時鐘源 CLK_GetFlagStatus:獲取時鐘狀態 CLK_SYSCLKConfig:系統時鐘分頻 中斷控制器ITC 中斷根據中斷事件請求的來源可分為軟件中斷和硬件中斷,硬件中斷又分為內部中斷和外部中斷。 所有 I/O 口都具有外部中斷能力,每個端口都具有獨立的中斷向量和獨立的中斷標志 2 個不可屏蔽(只要有中斷請求,處理器必須要處理)的中斷:RESET、TRAP; 1 個不可屏蔽的最高優先級的硬件中斷 TLI(PD7);
STM8S 的外部中斷向量一共有 5 個: PA 口:PA[6:2] 共 5 個管腳 PB 口:PB[7:0] 共 8 個管腳 PC 口:PC[7:0] 共 8 個管腳 PD 口:PD[6:0] 共 7 個管腳 PE 口:PE[7:0] 共 8 個管腳 
中斷向量表中的中斷又稱為硬件中斷,中斷向量號越小,中斷的優先級越高, 
軟件中斷優先級級別越高,優先級越高 
InitEXTI();函數為對按鍵對應的 I/O 口進行初始化 EXTI_DeInit:初始化相關寄存器至默認值 EXTI_SetExtIntSensitivity:設置指定端口的外部中斷觸發方式 enableInterrupts:開啟中斷 disableInterrupts:關閉中斷
中斷服務函數位于文件 stm8s_it.c中,此文件定義了所有中斷的服務程序。 定時器 高級控制型:TIM1,16 位; 通用型:TIM2/TIM3/TIM5,16 位; 基本型:TIM4/TIM6,8 位; Timer4_Init(0xff);為我們在庫函數基礎上開發的 API 函數,0xff 為輸入參數,函數作用是初始化 TIM4。 TIM4_DeInit();函數的功能為將 TIM4 相關寄存器全部恢復至默認值。 TIM4_TimeBaseInit 為初始化 TIM4 時基單元函數,第一個參數為設置 TIM4 的時鐘分頻值,;第二個參數為設置 TIM4_ARR 寄存器的值。 TIM4_ITConfig 為 TIM4 中 斷 配 置 函 數 , 它 設 置 TIM4 向 上 溢 出 中 斷 , 并 使 能 中 斷 。 TIM4_Cmd(ENABLE);為使能 TIM4 并開始計數。 TIM4 溢出中斷的響應函數在程序文件 stm8s_it.c 中 函數 TIM1_DeInit()將 TIM1 的相關寄存器恢復至默認值。 函數 TIM1_TimeBaseInit()用于初始化 TIM1 時基參數,可以設置 TIM1 的預分頻值、計數方式、自動 重裝載值及重復計數器值。 TIM1_OC3Init()用于初始化輸出比較通道 3 的參數,可以設置 TIM1 通道 3 匹配時輸出電平和 PWM 模式、是否啟用比較輸出及互補比較輸出、脈沖寬度、輸出比較及互補輸出比較的極性、輸出比較空閑 狀態及互補輸出比較空閑狀態的電平值。參數脈沖寬度在 PWM 模式中使用,在其他模式中不能設置位高 于 TIM1_ARR 寄存器的值。 TIM1_Cmd(ENABLE)語句則使能 TIM1 計數器開始計數。 TIM1_OC3PreloadConfig(ENABLE)使能輸出比較 3 預裝載功能。 TIM1_CtrlPWMOutputs(ENABLE)使能 TIM1 的主輸出功能 模數轉換器 分辨率為10位 轉換可被外部觸發:ADC專用外部中斷ADC_ETR、定時器觸發信號 TRGO IIC總線接口 所有的通信器件通過串行數據線 SDA 和串行時鐘線 SCL,但某一時刻總線上只能有一個主機 實際應用中 IIC 總線的 2 根通信線須接有 5~10K 的上拉電阻(10K)
EEPROM(Electrically Erasable Programmable Read-Only Memory),電擦除可編程只讀存儲器, 和電寫入、掉電后數據不丟失的存儲器,它在應用中一般存儲用戶數據,在系統運行過程中可以隨時修改,系統復位之后從里面讀取的是修改之后的新數據
完整的Word格式文檔51黑下載地址:
STM8S學習筆記.docx
(604.05 KB, 下載次數: 19)
2020-3-28 09:52 上傳
點擊文件名下載附件
STM8S學習心得 下載積分: 黑幣 -5
|