专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

STM8系统讲解应用经验

作者:张小强   来源:张小强   点击数:  更新时间:2015年01月10日   【字体:

  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将会用上面一样的格局.

时间因素先到这里,定期更新。
太多需要改变的,怎能停下。

关闭窗口

相关文章