STM8系统讲解应用经验

stm8s外设资源丰富,性能优越,性价比高,这里分享下自己的开发经验,给有兴趣的朋友。先看下配置。

不错吧,而它的价格只有3元,0系列的产品则仅有1元多点。很诱人吧。更诱人的是,学好了这个,再学STM32将变的顺手起来。外设的控制大致是一样的。切入正题,下边的说明 将针对直接寄存的控制,不用库开发。(8实在没必要)

GPIO 的控制:

每组IO 都有5个寄存器负责分别是

PX_ODR   :输出状态控制寄存器          
PX_DDR  :数据方向控制寄存器 
PX_CR1   :上拉电阻控制寄存器
PX_CR2   :外部中断控制寄存器  
PX_IDR    :读端口状态寄存器

下边列出几种常用的端口配置:

推挽输出   低电平   PX_DDR=0XFF;PX_CR1=0XFF;  

高电平时将PX_ODR=0XFF 配置下这里说一STVD 中的位操作。

以PD_ODR 端口3控制led为例     _Bool     led     @PD_ODR:3;    

就直接可以对led进行操作。

模拟输入 所用端口需要在初始状态,

最好做如下操作

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于普通外部中 断的区别;

在用外部中断是需要在端口于地间加104电容。

不要在SWIM上加,你会后悔的。哈哈,在用TLI时主要在配置字节选项里选择对应端口服用功能。

推挽输出没有啥好研究的AD后面说,先看一下外部中断 的应用;配置循序及内容1,配置端口2,编写对应的中断函数3,在 interrupt配置对应中断4,开总中断。





上边的程序用到了推挽于中断 。就这么简单。比51的p口好玩吧。

定时器

下边该说定时器了,stm8s10X 有一个高级定时器TIM1普通定时器TIM2 TIM3,通用定时器 TIM4.

先从简单的说起通用定时器TIM4 .他是一个单纯的8位正计计时器。

先说一下他的寄存器、

TIM4_CR1 :  控制寄存器,包含了使能,中断更新,预装值等控制位

TIM4_CR2 :  控制器 主要用于输出信号没必要深究

TIM4_SR:    状态寄存器  ,触发中断及中断更新事件

TIM4_PSCR:定时器时基预分频器   可用的只有低三位 分频因数为 2^PSCR最大分频128

TIM4_ARR:  自动重装值,在中断产生时将本值赋给CNTR

TIM4_CNTR:计数寄存器

TIM4_IER:   中断使能

TIM4_EGR: 中断产生事件

还是比较简单的只是单纯的计时器。

配置步骤

1,配置定时器寄存器,2开启总中断,3写对应中断函数。

这里也用到了中断,

stm8s103有24个中断中断向量如下以后会经常用到必须记住



看门狗

在工业现场,环境复杂,干扰强烈,极有可能造成程序跑飞。要习惯性的用看门狗,即便是测试没问题。

看门狗的走势图如下
 

内部低速时钟( LSI   128KHz) 的2分频为看门狗提供计数时钟源 这个是不可控分频。接着来到IWDG_PR预分频寄存器可选分频系数(4,8,16,32,64,128,256),然后是自动重装寄存器 IWDG_RLR.写这个寄存器必须要IWDG_KR密钥寄存器解密钥,设置完后加密钥。

程序很简单,配置步骤如下;

1 开启看门狗  

2 允许操作看门狗寄存器   解密

3 配置看门狗 模式   分频系数 重装载值 

4 给看门狗计数器装载值 

5 定时喂狗   

可以通过Debug修改IWDG_EN的值看程序运行情况,为0时不断的复位,i无法长期累计,修改为1时可以喂狗i将得到累加。到这里看门狗部分就说完了,调用看门狗配置函数,根据需要配置看门狗函数,定期喂狗就OK了。

UART

寄存器说明:

UARTx_SR: 状态寄存器,包含了数据寄存器状态 总线状态 帧 等状态,常用的是中断中清除接收寄存器满标志

发送时判断是否发送成功,发送寄存器是否为空

UARTx_DR: 数寄存器,用于存放发送,和接收到的数据。

UARTx_BBR1: 波特率控制寄存器用于控制串口波特率 存放波特率的  BIT11——BIT4

UARTx_BBR2: 波特率控制寄存器用于控制串口波特率 存放波特率的  BIT0-BIT3   BIT12-BIT15

UARTx_CR1: 控制寄存器1  数据位数,奇偶校验 等控制。

UARTx_CR2: 控制寄存器2 ,收发使能 收发中断使能 模式选择。

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

好下面进入代码部分 ,串口初始化,中断接收,符合要求的数据返回一个规定值,很简单重要是学习方法,思路,这个对写好一个程序很重要









串口就说道这里了,具体怎么用看自己了,注意看MAIN.C的思路,结合数据手册看一下。

有错误的地方以数据手册为准。还有在用STVD 的时候有个很狗血的地方无法看代码量,可以在调试模式下看看,起始地址0X8080Flash,往下看出现连续0 的时候看一下地址,自己算一下就知道代码量了,也可以自己写一个小函数检测下,都是比较简单的。

0系列8k,1系列16-32K不等,下节内容IIC  驱动PCF8563 。

以后的程序MAIN.C将会用上面一样的格局。

时间因素先到这里,定期更新。

太多需要改变的,怎能停下。

永不止步步 发表于11-23 10:19 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363791个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号