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