先看下配置。
不错吧,而它的价格只有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将会用上面一样的格局.