STM8S003F3使用总结——定时器
STM8S003F3有三个定时器,分别为16位高级定时器TIM1、16位通用定时器TIM2和8位基础定时器TIM4。其中,TIM1和TIM2支持PWM输出,本项目中用到了TIM1-CH1和TIM2-CH1两个通道作为PWM输出,以及TIM4作为时基,下面进入正文。
编译环境:IAR for STM8 3.10.2
库版本:V2.2.0
1.定时器
关于定时器没什么好说的,直接看下配置代码
void TIM1_Init(u16 psc, u16 arr, u16 duty)
{TIM1_TimeBaseInit(psc, TIM1_COUNTERMODE_UP, arr, 0); TIM1_OC1Init(TIM1_OCMODE_PWM1, \ TIM1_OUTPUTSTATE_ENABLE, \TIM1_OUTPUTNSTATE_ENABLE,\duty, \ TIM1_OCPOLARITY_LOW, \TIM1_OCNPOLARITY_HIGH, \TIM1_OCIDLESTATE_SET, \TIM1_OCNIDLESTATE_RESET); TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE); TIM1_OC1PreloadConfig(ENABLE);TIM1_CtrlPWMOutputs(ENABLE);TIM1_Cmd(ENABLE);
}
void TIM2_Init(TIM2_Prescaler_TypeDef TIM2_Prescaler, u16 arr, u16 duty)
{TIM2_TimeBaseInit(TIM2_Prescaler, arr); TIM2_OC1Init(TIM2_OCMODE_PWM1, \TIM2_OUTPUTSTATE_ENABLE,\duty, \TIM2_OCPOLARITY_HIGH); \TIM2_OC1PreloadConfig(ENABLE);TIM2_Cmd(ENABLE);
}
其中TIM2_Prescaler_TypeDef定义为:
typedef enum
{TIM2_PRESCALER_1 = ((uint8_t)0x00),TIM2_PRESCALER_2 = ((uint8_t)0x01),TIM2_PRESCALER_4 = ((uint8_t)0x02),TIM2_PRESCALER_8 = ((uint8_t)0x03),TIM2_PRESCALER_16 = ((uint8_t)0x04),TIM2_PRESCALER_32 = ((uint8_t)0x05),TIM2_PRESCALER_64 = ((uint8_t)0x06),TIM2_PRESCALER_128 = ((uint8_t)0x07),TIM2_PRESCALER_256 = ((uint8_t)0x08),TIM2_PRESCALER_512 = ((uint8_t)0x09),TIM2_PRESCALER_1024 = ((uint8_t)0x0A),TIM2_PRESCALER_2048 = ((uint8_t)0x0B),TIM2_PRESCALER_4096 = ((uint8_t)0x0C),TIM2_PRESCALER_8192 = ((uint8_t)0x0D),TIM2_PRESCALER_16384 = ((uint8_t)0x0E),TIM2_PRESCALER_32768 = ((uint8_t)0x0F)
}TIM2_Prescaler_TypeDef;
void TIM4_Init(TIM4_Prescaler_TypeDef TIM4_Prescaler, u8 arr)
{TIM4_DeInit();TIM4_TimeBaseInit(TIM4_Prescaler, arr);TIM4_ClearFlag(TIM4_FLAG_UPDATE);TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);TIM4_Cmd(ENABLE);
}
其中TIM4_Prescaler_TypeDef定义为:
typedef enum
{TIM4_PRESCALER_1 = ((uint8_t)0x00),TIM4_PRESCALER_2 = ((uint8_t)0x01),TIM4_PRESCALER_4 = ((uint8_t)0x02),TIM4_PRESCALER_8 = ((uint8_t)0x03),TIM4_PRESCALER_16 = ((uint8_t)0x04),TIM4_PRESCALER_32 = ((uint8_t)0x05),TIM4_PRESCALER_64 = ((uint8_t)0x06),TIM4_PRESCALER_128 = ((uint8_t)0x07)
} TIM4_Prescaler_TypeDef;
高级定时器之所以高级是有原因的,更多的参数使功能更强大,当然这也不是绝对的,在项目开发中,有时候逻辑简化能使参数归一,但是并不影响实际功能。这里的参数一个是开放给开发者,一个是用户,并没有太大可比性,只是说明一种观点。
PWM1和PWM2两种模式的区别
TIM_OCMode_PWM1:
- 当计时器值小于比较器设定值时则TIMX输出脚此时输出有效高电位。
- 当计时器值大于或等于比较器设定值时则TIMX输出脚此时输出低电位。
TIM_OCMode_PWM2:
- 当计时器值小于比较器设定值时则TIMX输出脚此时输出有效低电位。
- 当计时器值大于或等于比较器设定值时则TIMX输出脚此时输出高电位。
------------------------------------------------------------我是分隔线-----------------------------------------------------------------
下面划重点
下面划重点
下面划重点
当一切准备就绪后,却发现PWM怎么都无法输出,折腾了好久,后来只好回归手册,在引脚说明表中对引脚说明如下:
很明显,这两个IO要作为PWM输出需要复用,但是复用方法很特殊,需要修改对应option bit,这里需要修改AFR0位才能输出PWM。那么现在的问题就是如何配置AFR0这个位了。
2.Option-Bytes配置
网上查找了相关问题后,这里做一下总结。
AFR0等选项组成Option-Bytes,那么如何配置Option-Bytes,这里总结三种方法。
基于IAR
点击顶部菜单栏ST-LINK–>Option Bytes…
打开Option Bytes选项框,右键置位Alternate Active
基于STVP
如图所示,点击底部切换到OPTION BYTE界面,选择对应配置字即可。
基于程序代码
选项字节在片内地址如下:
从表中可见,需要将OPT2的最低位AFR0置1,代码如下:
#define OPTION_BYTES_ADDR 0x4803void Set_OptionByte(void)
{u16 Option_Bytes;Option_Bytes = FLASH_ReadOptionByte(OPTION_BYTES_ADDR);if(Option_Bytes & 0x01 == 0){FLASH_ProgramOptionByte(OPTION_BYTES_ADDR, (u8)Option_Bytes | 0x01);}
}
STM8S003F3使用总结——定时器相关推荐
- STM8S003F3 使用定时器来计算方波周期的方法
我们的需求是stm8做从机,然后使用一根线接收方波,来实现不同的功能,比如亮红灯,亮黄灯,打开蜂鸣器等等等等. 那么问题来了,之前我尝试着通过一次发送多少个方波来实现不同的功能,但是到最后我发现这个方 ...
- 基于STM8S003f3的单键触摸开关制作
提示:设计资料在文章末尾有链接下载 功能需求: 1. 单按触摸按键关闭/开启连接的用电器电源 2. 双击触摸按键延时5分钟关闭连接的用电器电源 需求分析: 控制部分:单片机--要求引脚少,因为需要使用 ...
- STM8S003F3通过PWM波实现三基色呼吸灯
前段时间使用STM8S003F3实现了一个三基色灯的各种效果,故写一篇文章作为一个记录. 1 综述 我们知道,要是的LED灯亮直接通电即可.而要改变灯的亮度,我们有两种方法:改变电流和PWM调光. 我 ...
- 一文吃透JAVA定时器格式
JAVA 定时器时间格式 基本格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许使用的通配符 1 秒 是 0-59 , - ...
- Timer定时器开发
Timer定时器开发 定时器的作用是不占线程的等待一个确定时间,同样通过callback来通知定时器到期. 参考:https://github.com/sogou/workflow 定时器的创建 同样 ...
- linux定时器(crontab)实例
linux实验示例----实现每2分钟将"/etc"下面的文件打包存储到"/usr/lobal"目录下 ·Step1:编辑当前用户的crontab并保存 终端输 ...
- c语言程序设计分段定时器,单片机C语言编程定时器的几种表达方式
原标题:单片机C语言编程定时器的几种表达方式 吴鉴鹰单片机开发板地址 店铺:[吴鉴鹰的小铺] 地址:[https://item.taobao.com/item.htm?_u=ukgdp5a7629&a ...
- linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落
按键抖动示意图 我们平常所用的按键为机械弹性开关,由于触点的弹性作用,按键在闭合时不会马上稳定的接通,而是有一段时间的抖动,在断开时也不会立即断开.抖动时间由按键的机械特性所决定,一般为5ms~10m ...
- mysql 定时器不能持续循环执行_定时器,不循环执行指定方法?如何解决?
⁽⁽ଘ你管我管你疯啊ଓ⁾⁾ 01-22 加粗 标红 插入代码 插入链接 插入图片 上传视频 请 登录 后发表内容 关闭 新增或编辑超链接 链接地址 关闭 插入视频 视频链接 messageScroll ...
- oracle定时器怎么开启,Oracle的定时器使用示例
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. --Oracle定时job --数据库执行此脚本时时,请确保只执行一次,否则会引发错误! ...
最新文章
- 独家 | 初学者的问题:在神经网络中应使用多少隐藏层/神经元?(附实例)
- MongoDB GridFS——本质上是将一个文件分割为大小为256KB的chunks 每个chunk里会放md5标识 取文件的时候会将这些chunks合并为一个整体返回...
- Backlog和冲刺结果以及产品Demo市场调研
- suffix tree
- 云舒网络译:Rancher1.0正式版公布
- java swing http请求_JavaWeb核心编程之(三.5)HTTP请求和接受表单数据
- 剖析亿级请求下的多级缓存
- Perl 6 真的太烦人了?
- Linux虚拟机连不上网克隆虚拟机网卡无法启动
- 哎呀!可能有弹出式窗口拦截器生成Gmail无法打开该网页。如果您使用弹出式窗口拦截器,请将其关闭以便打开窗口。...
- 通过共享文件夹来进行前后端独立开发
- 交通流理论学习(Introduciton)
- Nginx+Tomcat负载均衡--win7配置详解
- Arduino使用人体红外传感器
- android 窗口切换花屏,分享Android4平台二级页面滚动花屏问题的解决方案v1.0.0
- uniapp打包后高德地图定位失败解决
- Camera | 4.瑞芯微平台MIPI摄像头应用程序编写
- 大学生新生报到管理系统
- sql优化+索引优化+详解(存储过程+函数 创建千万的测试数据)
- 有用的博客整理(Android系统编译相关)