stm8s外設資源豐富,性能優(yōu)越,性價比高,這里分享下自己的開發(fā)經驗,給有興趣的朋友。先看下配置。
不錯吧,而它的價格只有3元,0系列的產品則僅有1元多點。很誘人吧。更誘人的是,學好了這個,再學STM32將變的順手起來。外設的控制大致是一樣的。切入正題,下邊的說明 將針對直接寄存的控制,不用庫開發(fā)。(8實在沒必要)
GPIO 的控制:
每組IO 都有5個寄存器負責分別是
PX_ODR :輸出狀態(tài)控制寄存器
PX_DDR :數(shù)據(jù)方向控制寄存器
PX_CR1 :上拉電阻控制寄存器
PX_CR2 :外部中斷控制寄存器
PX_IDR: 讀端口狀態(tài)寄存器
下邊列出幾種常用的端口配置:
推 挽輸出 低電平 PX_DDR=0XFF;PX_CR1=0XFF; 高電平時 將PX_ODR=0XFF 配置下這里說一STVD 中的位操 作。以PD_ODR 端口3控制led為例 _Bool led @PD_ODR:3; 就直接可以 對led進行操作。
模擬輸入 所用端口需要在初始狀態(tài),最好做如下操作 PX_DDR&=0X00;PX_ODR&=0X00;PX_CR1&=0X00;PX_CR2=0X00;
中斷輸入 :stm8的所有端口支持外部中斷,及最高外部中斷 TLI 需要與外部中斷EXTI_CRX寄存器配合使用
PX_DDR&=0X00; PX_ODR&=0X00;PX_CR1&=0X00;PX_CR2=0XFF;EXTI_CRX=0XFF; 注意TLI于普通外部中 斷的區(qū)別;在用外部中斷是需要在端口于地間加104電容。不要在SWIM上加,你會后悔的。哈哈,在用TLI時主要在配置字節(jié)選項里選擇對應端口服用功 能。
推挽輸出沒有啥好研究的 AD后面說,先看一下外部中斷 的應用;配置循序及內容
1,配置端口2,編寫對應的中斷函數(shù)3,在 interrupt配置對應中斷4,開總中斷。
上邊的程序用到了推挽 于中斷 。就這么簡單。比51 的p口好玩吧。
定時器
下邊該說定時器了,stm8s10X 有一個高級定時器TIM1普通定時器TIM2 TIM3,通用定時器 TIM4.
先從簡單的說起通用定時器TIM4 .他是一個單純的8位正計計時器。先說一下他的寄存器、
TIM4_CR1 : 控制寄存器,包含了使能,中斷更新,預裝值等控制位
TIM4_CR2 : 控制器 主要用于輸出信號沒必要深究
TIM4_SR: 狀態(tài)寄存器 ,觸發(fā)中斷及中斷更新事件
TIM4_PSCR:定時器時基預分頻器 可用的只有低三位 分頻因數(shù)為 2^PSCR最大分頻128
TIM4_ARR: 自動重裝值,在中斷產生時將本值賦給CNTR
TIM4_CNTR:計數(shù)寄存器
TIM4_IER: 中斷使能
TIM4_EGR: 中斷產生事件
還是比較簡單的 只是單純的計時器。配置步驟
1,配置定時器寄存器,2開啟總中斷,3寫對應中斷函數(shù)。
這里也用到了中斷,stm8s103有24個中斷 中斷向量如下以后會經常用到必須記住
。
看門狗
在工業(yè)現(xiàn)場,環(huán)境復雜,干擾強烈,極有可能造成程序跑飛。要習慣性的用看門狗,即便是測試沒問題。
看門狗的走勢圖如下
內 部低速時鐘( LSI 128KHz) 的2分頻為看門狗提供計數(shù)時鐘源 這個是不可控分頻。接著來到IWDG_PR預分頻寄存器可選分頻系數(shù)(4,8,16,32,64,128,256),然后是自動重裝寄存器 IWDG_RLR.寫這個寄存器必須要IWDG_KR密鑰寄存器解密鑰,設置完后加密鑰。
程序很簡單,配置步驟如下;
1 開啟看門狗 。
2允許操作看門狗寄存器 解密
3配置看門狗 模式 分頻系數(shù) 重裝載值
4給看門狗計數(shù)器裝載值
5 定時喂狗
可以通過Debug修改IWDG_EN的值看程序運行情況,為0時不斷的復位,i無法長期累計,修改為1時可以喂狗i將得到累加。到這里看門狗部分就說完了,調用看門狗配置函數(shù),根據(jù)需要配置看門狗函數(shù),定期喂狗就OK了。
UART
寄存器說明:
UARTx_SR: 狀態(tài)寄存器,包含了數(shù)據(jù)寄存器狀態(tài) 總線狀態(tài) 幀 等狀態(tài),常用的是中斷中清除接收寄存器滿標志
發(fā)送時判斷是否發(fā)送成功,發(fā)送寄存器是否為空
UARTx_DR: 數(shù)寄存器,用于存放發(fā)送,和接收到的數(shù)據(jù)。
UARTx_BBR1: 波特率控制寄存器用于控制串口波特率 存放波特率的 BIT11——BIT4
UARTx_BBR2: 波特率控制寄存器用于控制串口波特率 存放波特率的 BIT0-BIT3 BIT12-BIT15
UARTx_CR1: 控制寄存器1 數(shù)據(jù)位數(shù),奇偶校驗 等控制。
UARTx_CR2: 控制寄存器2 ,收發(fā)使能 收發(fā)中斷使能 模式選擇。
UARTx_CR3: 控制寄存器3, 停止位選擇及使用時鐘線選擇時鐘極性。
UARTx_CR4: 控制寄存器4, LIN模式下的控制。
UARTx_CR5: 控制寄存器5, 智能卡及紅外模式下的設置。
UARTx_CR6: 控制寄存器6, LIN模式下的控制。
UARTx_GTR: 智能卡模式下的保護時間寄存器。
UARTx_PSCR: 智能卡及紅外模式下的波特率設置。
這 里只針對UART模式講解 stm8 有兩個串口 0系列用的是UART1 1系列用的UART2 2 系列都用,這里要注意用前面兩款的時候中斷向量要寫對,不然你會很惱火,找不到問題出在那。 uart1 接收中斷向量是18 uart2 接收中斷向量21
好下面進入代碼部分 ,串口初始化,中斷接收,符合要求的數(shù)據(jù)返回一個規(guī)定值,很簡單重要是學習方法,思路,這個對寫好一個程序很重要
串 口就說道這里了 ,具體怎么用看自己了,注意看MAIN.C的思路,結合數(shù)據(jù)手冊看一下。有錯誤的地方以數(shù)據(jù)手冊為準。還有在用STVD 的時候有個很狗血的地方無法看代碼量,可以在調試模式下看看,起始地址0X8080Flash,往下看出現(xiàn)連續(xù)0 的時候看一下地址,自己算一下就知道代碼量了,也可以自己寫一個小函數(shù)檢測下,都是比較簡單的。0系列8k,1系列16-32K不等,
下節(jié) 內容 IIC 驅動PCF8563 。以后的程序MAIN.C將會用上面一樣的格局.
時間因素先到這里,定期更新。
太多需要改變的,怎能停下。