开发STM8合泰单片机开发工具,需要哪些开发工具

新手进门,请教STM8用什么编译器和开发工具_百度知道
新手进门,请教STM8用什么编译器和开发工具
我有更好的答案
IAR for STM8介绍、下载、安装与注册:
采纳率:93%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。单片机二次开发怎么弄? - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 513|回复: 5
单片机二次开发怎么弄?
在线时间566 小时
ST金币2050
该用户从未签到主题帖子好友
如题,有没有二次开发的例程?
还有单片机的SDK是不是就是将代码编写成 .lib形式的库,提供 .h头文件供二次开发?
在线时间17 小时
ST金币1221
该用户从未签到主题帖子好友
金牌会员, 积分 1357, 距离下一级还需 3643 积分
金牌会员, 积分 1357, 距离下一级还需 3643 积分
单片机一般都是直接开发的,只有类似树莓派或者SoC才会二次开发
在线时间566 小时
ST金币2050
该用户从未签到主题帖子好友
单片机一般都是直接开发的,只有类似树莓派或者SoC才会二次开发
目前需要二次开发
在线时间271 小时
ST金币2323
该用户从未签到主题帖子好友
我也是这么想的,不过比较麻烦....
在线时间566 小时
ST金币2050
该用户从未签到主题帖子好友
我也是这么想的,不过比较麻烦....
是呀,目前需要提供给客户二次开发
在线时间17 小时
ST金币1221
该用户从未签到主题帖子好友
金牌会员, 积分 1357, 距离下一级还需 3643 积分
金牌会员, 积分 1357, 距离下一级还需 3643 积分
是呀,目前需要提供给客户二次开发
HAL库、STM32CUBE都是二次开发啊
STM32粉丝勋章Ⅲ
狂欢节专属(分享宝宝)
站长推荐 /2
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by后使用快捷导航没有帐号?
查看: 180|回复: 0
ST单片机STM8S开发入门教程
STS开发入门教程。
16:46 上传
点击文件名下载附件.
920.93 KB, 下载次数: 1
售价: 1 rd币 &[]
获取手机验证码51和stm8,谁才最适合市场!!【单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:145,819贴子:
51和stm8,谁才最适合市场!!收藏
如果搞开发的,大家都用stm32,不是stm32,用8位的话,人家公司一般就不会开发,直接套用51的例子了,免开发,花费少,所以stm8是个尴尬的存在。不过stm8的价格和性能确实比51给力,性价比高得离谱。51也便宜,就是没它便宜,不过51的资源和例子真心多。所以,大家认为哪个好呢!
为用户提供各种低成本,低功耗,低能耗,功能强的微控制器解决方案.恩智浦微控制器,高性能,设计新颖,性能稳定,价格超低,欲购从速,欢迎垂询!
拿个沙发先
←_←没人听说过stm8吗
51一点优势都没有。网上的例子都是给学生玩的,离做产品还很远。再说作为电子工程师网上的例子移植任何一款单片机都不成问题。价格和资源51比不过Stm8和台湾的单片机,连国产Stc都比Stm8贵,稳定性跟AVR,PIC,飞思卡尔也差十万八千里。
stm8这价格加超赞的功能引脚
你们没听说过新塘m051系列吗?
用51带来的硬件成本比那一点点开发成本高太多了
----这句话肯定不足十五字----
听说很便宜 还没玩过
专业单片机生产商,为您提供各种微处理器产品,丰富产品线对应不同客户的需要!产品有空调微处理器,汽车微处理器,洗衣机微处理器及电冰箱微处理器等!
做产品还是得用STM8,51很少用!
stm32也不会贵,性价比比stm8好多了
C51是学习用的,大学教材都是从C51汇编讲起。做产品呢还是其他类型的单片机好,当然要求不高的情况下C51单片机也是可以的,毕竟软件成本低。
低端有低端的市场,高端有高端的市场。如果一个51就能解决问题的话,就用51可以节省成本
这个找老婆一样,每个人适合的不同。stm8其实就是个桥,把顾客往stm32拉的桥。我个人看法是,除非需要较大计算资源。一般控制51就行了。不折腾。如果要大量更便宜,那就连51都不用了。4位单片机足矣
学过32的,用8也一样
STM8多好用啊,51太贵了...STM8S003价格秒一切51...要说网上程序??底层驱动也就一天写完,应用层照搬就是了...
登录百度帐号推荐应用当前位置: >>
【应用笔记】如何基于STM8S系列单片机以及触摸式软件库方案进行项目开发
AN 应用笔记如何基于STM8S系列单片机以及触摸式软件库方案 系列单片机以及触摸式软件库方案 如何基于进行项目开发简介本文对基于STM8S系列MCU的触摸式按键库的软硬件开发做了基本介绍。页1/46 目录1 如何将库文件移植到STM8S各种系列的MCU上 ................................................................................. 4 1.1 1.2 1.3 1.4 2 修改 stm8_tsl_rc_iodriver.h 文件 ............................................................................................. 5 修改 stm8_tsl_rc_iodriver.c 文件.............................................................................................. 6 修改 stm8s_map.h 文件 ......................................................................................................... 11 修改 stm8_tsl_rc_timerdriver.c 文件 ...................................................................................... 15如何根据原理图配置库文件............................................................................................................... 18 2.1 2.2 术语说明 ................................................................................................................................. 18 MCU资源需求......................................................................................................................... 18 2.2.1 2.2.2 2.2.3 2.3 2.4 MCU 硬件资源............................................................................................................. 18 MCU软件资源.............................................................................................................. 18 MCU的选择 ................................................................................................................. 19硬件设计 ................................................................................................................................. 20 软件设计 ................................................................................................................................. 22 2.4.1 2.4.2 2.4.3 2.4.4 软件库介绍 .................................................................................................................. 22 软件库的使用............................................................................................................... 23 头文件的配置............................................................................................................... 23 软件库中的状态机........................................................................................................ 333PCB设计方针 .................................................................................................................................... 35 3.1 3.2 3.3 3.4 3.5 3.6 板的面积 ................................................................................................................................. 35 地平面..................................................................................................................................... 35 Driven Shield .......................................................................................................................... 36 通讯线隔离 ............................................................................................................................. 36 LED的使用.............................................................................................................................. 37 稳压器..................................................................................................................................... 384按键和单元设计 ................................................................................................................................. 39 4.1 表面电容按键.......................................................................................................................... 39 4.1.1 4.1.2 4.1.3 4.1.4 4.2 形状 ............................................................................................................................. 39 尺寸 ............................................................................................................................. 40 按键-按键的距离 .......................................................................................................... 40 按键-地的距离.............................................................................................................. 40滑动条..................................................................................................................................... 40 4.2.1 4.2.2 4.2.3 滑动条的尺寸和布局.................................................................................................... 41 间距 ............................................................................................................................. 41 交叉 ............................................................................................................................. 41页2/46 4.3 4.4滚轮 ........................................................................................................................................ 42 电容式感应走线 ...................................................................................................................... 42 4.4.1 4.4.2 4.4.3 长度 ............................................................................................................................. 43 宽度 ............................................................................................................................. 43 分组 ............................................................................................................................. 435附录 ................................................................................................................................................... 44 5.1 5.2 5.3 STM8S触摸式按键评估板 ...................................................................................................... 44 STM8S触摸式按键评估板原理图 ........................................................................................... 45 参考资料列表.......................................................................................................................... 46页3/46 1如何将库文件移植到 各种系列 系列的 如何将库文件移植到 STM8S 各种系列的 MCU 上从ST的官方网站下载的STM8 Touch Sensing Library是适用于STM8S20X系列和STM8L系列 MCU的。而STM8其他系列的芯片在资源配置上与其略有差别,因此要在其它系列的芯片上使 用STM8S 触摸软件库,必须对库做一些修改。主要是关于Timer各寄存器地址的更改。 如表1所示,STM8S各系列芯片的Timer资源略有不同。 表1 STM8S各系列芯片的 各系列芯片的Timer资源的对照 各系列芯片的 资源的对照TIM1 TIM2 TIM3 TIM4 TIM5 TIM6 软件库使用的 软件库使用的Timer资源 用的 资源 TIM3,TIM4 TIM3,TIM4 TIM2,TIM4 TIM5,TIM6芯片系列 STM8S207 STM8S105 STM8S103 STM8S903STM8S 触摸软件库需要使用一个16位定时器作为IO口充放电时间计算,一个8位定时器作为时 基。库中提供的DEMO基于207系列芯片,使用TIM3和TIM4,因此对于STM8S105系列来说, 可 以 直 接 使 用 原 来 的 库 。 但 是 STM8S103 上 没 有 TIM3 , 需 要 将 TIM3 更 改 到 TIM2 。 而 对 STM8S903来说,定时器的名称变成了TIM5,TIM6(尽管地址基本与TIM3,TIM4一致)。所以 本章会详细对如何将软件库更改后应用与STM8S103和STM8S903系列的芯片进行详细说明。共有如下文件需要修改: stm8_tsl_rc_iodriver.h stm8_tsl_rc_iodriver.c stm8s_map.h stm8_tsl_rc_timerdriver.c (仅在使用STM8S903时需要修改)页4/46 1.1修改 stm8_tsl_rc_iodriver.h 文件******************************************** 文件名:“stm8_tsl_rc_iodriver.h& ******************************************** 对STM8S103系列: TIM3_CNTR =》 TIM2_CNTR (并将相应地址由0x5328改为0x530C)修改前修改后对STM8S903系列: TIM3_CNTR =》 TIM5_CNTR (并将相应地址由0x5328改为0x530C)修改前修改后页5/46 1.2修改 stm8_tsl_rc_iodriver.c 文件******************************************* 文件名:“stm8_tsl_rc_iodriver.c& ******************************************* 对STM8S103系列: TIM3_CNTR =& TIM2_CNTR 在这个文件中共有3个函数用到这个寄存器,如下 1)修改前修改后页6/46 2)修改前修改后页7/46 3)修改前修改后页8/46 TIM3-&PSCR =& TIM2-&PSCR TIM3-&CR1 =& TIM2-&CR1修改前修改后页9/46 TIM3-&EGR =& TIM2-&EGR修改前修改后对STM8S903系列: TIM3_CNTR =& TIM5_CNTR TIM3-&PSCR =& TIM5-&PSCR TIM3-&CR1 =& TIM5-&CR1 TIM3-&EGR =& TIM5-&EGR 具体需要修改的地方如上对STM8S103系列的描述。页10/46 1.3修改 stm8s_map.h 文件********************************** 文件名:“stm8s_map.h& ********************************** 对STM8S103系列: 由于STM8S103系列的定时器寄存器地址与STM8S207有些不同,多插入了两个保留字节,因 此需要进行如下修改: TIM2寄存器 寄存器修改前修改后页11/46 TIM4寄存器 寄存器修改前修改后对STM8S903系列: 增加TIM5,TIM6寄存器的定义。将下面的寄存器信息加入到stm8s_map.h文件中。/*----------------------------------------------------------------------------*/ /** * @brief 16-bit timer (TIM5) */ typedef struct TIM5_struct { vu8 CR1; /*!& control register 1 */ vu8 CR2; vu8 SMCR; vu8 IER; /*!& interrupt enable register */ vu8 SR1; /*!& status register 1 */ vu8 SR2; /*!& status register 2 */ vu8 EGR; /*!& event generation register */ vu8 CCMR1; /*!& CC mode register 1 */ vu8 CCMR2; /*!& CC mode register 2 */ vu8 CCER1; /*!& CC enable register 1 */ vu8 CNTRH; /*!& counter high */ vu8 CNTRL; /*!& counter low */ vu8 PSCR; /*!& prescaler register */ vu8 ARRH; /*!& auto-reload register high */ vu8 ARRL; /*!& auto-reload register low */页12/46 vu8 CCR1H; /*!& capture/compare register 1 high */ vu8 CCR1L; /*!& capture/compare register 1 low */ vu8 CCR2H; /*!& capture/compare register 2 high */ vu8 CCR2L; /*!& capture/compare register 2 low */ } TIM5_TypeD/** @addtogroup TIM5_Registers_Reset_Value * @{ */#define TIM5_CR1_RESET_VALUE ((u8)0x00) #define TIM5_IER_RESET_VALUE ((u8)0x00) #define TIM5_SR1_RESET_VALUE ((u8)0x00) #define TIM5_SR2_RESET_VALUE ((u8)0x00) #define TIM5_EGR_RESET_VALUE ((u8)0x00) #define TIM5_CCMR1_RESET_VALUE ((u8)0x00) #define TIM5_CCMR2_RESET_VALUE ((u8)0x00) #define TIM5_CCER1_RESET_VALUE ((u8)0x00) #define TIM5_CNTRH_RESET_VALUE ((u8)0x00) #define TIM5_CNTRL_RESET_VALUE ((u8)0x00) #define TIM5_PSCR_RESET_VALUE ((u8)0x00) #define TIM5_ARRH_RESET_VALUE ((u8)0xFF) #define TIM5_ARRL_RESET_VALUE ((u8)0xFF) #define TIM5_CCR1H_RESET_VALUE ((u8)0x00) #define TIM5_CCR1L_RESET_VALUE ((u8)0x00) #define TIM5_CCR2H_RESET_VALUE ((u8)0x00) #define TIM5_CCR2L_RESET_VALUE ((u8)0x00)/** * @} *//** @addtogroup TIM5_Registers_Bits_Definition * @{ */#define TIM5_CR1_ARPE ((u8)0x80) /*!& Auto-Reload Preload Enable mask. */ #define TIM5_CR1_OPM ((u8)0x08) /*!& One Pulse Mode mask. */ #define TIM5_CR1_URS ((u8)0x04) /*!& Update Request Source mask. */ #define TIM5_CR1_UDIS ((u8)0x02) /*!& Update DIsable mask. */ #define TIM5_CR1_CEN ((u8)0x01) /*!& Counter Enable mask. *//*#define TIM5_IER_CC3IE ((u8)0x08)*/ /*!& Capture/Compare 3 Interrupt Enable mask. */页13/46 #define TIM5_IER_CC2IE ((u8)0x04) /*!& Capture/Compare 2 Interrupt Enable mask. */ #define TIM5_IER_CC1IE ((u8)0x02) /*!& Capture/Compare 1 Interrupt Enable mask. */ #define TIM5_IER_UIE ((u8)0x01) /*!& Update Interrupt Enable mask. */ /*#define TIM5_SR1_CC3IF ((u8)0x08)*/ /*!& Capture/Compare 3 Interrupt Flag mask. */ #define TIM5_SR1_CC2IF ((u8)0x04) /*!& Capture/Compare 2 Interrupt Flag mask. */ #define TIM5_SR1_CC1IF ((u8)0x02) /*!& Capture/Compare 1 Interrupt Flag mask. */ #define TIM5_SR1_UIF ((u8)0x01) /*!& Update Interrupt Flag mask. */ /*#define TIM3_SR2_CC3OF ((u8)0x08)*/ /*!& Capture/Compare 3 Overcapture Flag mask. */ #define TIM5_SR2_CC2OF ((u8)0x04) /*!& Capture/Compare 2 Overcapture Flag mask. */ #define TIM5_SR2_CC1OF ((u8)0x02) /*!& Capture/Compare 1 Overcapture Flag mask. */ /*#define TIM3_EGR_CC3G ((u8)0x08)*/ /*!& Capture/Compare 3 Generation mask. */ #define TIM5_EGR_CC2G ((u8)0x04) /*!& Capture/Compare 2 Generation mask. */ #define TIM5_EGR_CC1G ((u8)0x02) /*!& Capture/Compare 1 Generation mask. */ #define TIM5_EGR_UG ((u8)0x01) /*!& Update Generation mask. */ #define TIM5_CCMR_ICxPSC ((u8)0x0C) /*!& Input Capture x Prescaler mask. */ #define TIM5_CCMR_ICxF ((u8)0xF0) /*!& Input Capture x Filter mask. */ #define TIM5_CCMR_OCM ((u8)0x70) /*!& Output Compare x Mode mask. */#define TIM5_CCMR_OCxPE ((u8)0x08) /*!& Output Compare x Preload Enable mask. */ #define TIM5_CCMR_CCxS ((u8)0x03) /*!& Capture/Compare x Selection mask. */ #define TIM5_CCER1_CC2P ((u8)0x20) /*!& Capture/Compare 2 output Polarity mask. */ #define TIM5_CCER1_CC2E ((u8)0x10) /*!& Capture/Compare 2 output enable mask. */ #define TIM5_CCER1_CC1P ((u8)0x02) /*!& Capture/Compare 1 output Polarity mask. */ #define TIM5_CCER1_CC1E ((u8)0x01) /*!& Capture/Compare 1 output enable mask. */ #define TIM5_CNTRH_CNT ((u8)0xFF) /*!& Counter Value (MSB) mask. */ #define TIM5_CNTRL_CNT ((u8)0xFF) /*!& Counter Value (LSB) mask. */ #define TIM5_PSCR_PSC ((u8)0xFF) /*!& Prescaler Value (MSB) mask. */ #define TIM5_ARRH_ARR ((u8)0xFF) /*!& Autoreload Value (MSB) mask. */ #define TIM5_ARRL_ARR ((u8)0xFF) /*!& Autoreload Value (LSB) mask. */ #define TIM5_CCR1H_CCR1 ((u8)0xFF) /*!& Capture/Compare 1 Value (MSB) mask. */ #define TIM5_CCR1L_CCR1 ((u8)0xFF) /*!& Capture/Compare 1 Value (LSB) mask. */ #define TIM5_CCR2H_CCR2 ((u8)0xFF) /*!& Capture/Compare 2 Value (MSB) mask. */ #define TIM5_CCR2L_CCR2 ((u8)0xFF) /*!& Capture/Compare 2 Value (LSB) mask. *//** * @} */ /*----------------------------------------------------------------------------*/ /** * @brief 8-bit syTDRH timer (TIM4) */ typedef struct TIM6_struct { vu8 CR1; /*!& control register 1 */ vu8 CR2;页14/46 vu8 SMCR; vu8 IER; /*!& interrupt enable register */ vu8 SR1; /*!& status register 1 */ vu8 EGR; /*!& event generation register */ vu8 CNTR; /*!& counter register */ vu8 PSCR; /*!& prescaler register */ vu8 ARR; /*!& auto-reload register */ } TIM6_TypeD/** @addtogroup TIM4_Registers_Reset_Value * @{ */ #define TIM6_CR1_RESET_VALUE ((u8)0x00) #define TIM6_IER_RESET_VALUE ((u8)0x00) #define TIM6_SR1_RESET_VALUE ((u8)0x00) #define TIM6_EGR_RESET_VALUE ((u8)0x00) #define TIM6_CNTR_RESET_VALUE ((u8)0x00) #define TIM6_PSCR_RESET_VALUE ((u8)0x00) #define TIM6_ARR_RESET_VALUE ((u8)0xFF) /** * @} */ /** @addtogroup TIM4_Registers_Bits_Definition * @{ */ #define TIM6_CR1_ARPE ((u8)0x80) /*!& Auto-Reload Preload Enable mask. */ #define TIM6_CR1_OPM ((u8)0x08) /*!& One Pulse Mode mask. */ #define TIM6_CR1_URS ((u8)0x04) /*!& Update Request Source mask. */ #define TIM6_CR1_UDIS ((u8)0x02) /*!& Update DIsable mask. */ #define TIM6_CR1_CEN ((u8)0x01) /*!& Counter Enable mask. */ #define TIM6_IER_UIE ((u8)0x01) /*!& Update Interrupt Enable mask. */ #define TIM6_SR1_UIF ((u8)0x01) /*!& Update Interrupt Flag mask. */ #define TIM6_EGR_UG ((u8)0x01) /*!& Update Generation mask. */ #define TIM6_CNTR_CNT ((u8)0xFF) /*!& Counter Value (LSB) mask. */ #define TIM6_PSCR_PSC ((u8)0x07) /*!& Prescaler Value mask. */ #define TIM6_ARR_ARR ((u8)0xFF) /*!& Autoreload Value mask. */1.4修改 stm8_tsl_rc_timerdriver.c 文件******************************************** 文件名:“stm8_tsl_rc_timerdriver.c& ********************************************页15/46 对STM8S103系列: 此文件对STM8S103系列来说,不需要做改动。对STM8S903系列: TIM4 -& SR1 TIM4 -& PSCR TIM4 -& ARR TIM4 -& IER TIM4 -& CR1 =& =& =& =& =& TIM6 -&SR1 TIM6 -& PSCR TIM6 -& ARR TIM6 -& IER TIM6 -& CR1修改前修改后页16/46 修改前修改后页17/46 2如何根据原理图配置库文件用户在进行触摸方案的开发时需要遵循如下步骤: 1) 根据所需按键种类和数量选择合适的MCU; 2) 硬件设计 根据布局以及功能需要将按键检测脚安排在合适的引脚上,需要注意的是不要将按键检测 脚安排在True open drain引脚和OSC1/PA1,OSC2/PA2引脚上(前者无法输出高电平,后 者的内部结构与一般IO口不同,不适宜作为按键检测脚使用)。 3) 软件设计 根据原理图进行库文件配置,并加入用户自己的应用程序。2.1术语说明在下面的描述中会用到一些术语 PORT(端口): 指MCU的PA端口,PB端口。。。。一般来说这些端口根据封装不同会包括1~8个对应的 引脚。 LOAD: 指触摸式按键方案中对按键进行充放电的引脚,所有的按键共用一个LOAD脚 Driven Shield(屏蔽脚): 指触摸式按键方案中对按键起屏蔽效果的引脚,每个端口需要分配一个引脚作为Driven Shield。 Electrode(电极): 指画在PCB板上作为用户按键的部分。2.2MCU资源需求 资源需求STM8S系列触摸软件库使用如下MCU的硬件资源 1个16位定时器 (用于采集按键信号: 测量RC充放电时间) 1个8位定时器 (主要作为后处理的时基信号) 每个通道1个通用IO 1个 I/O 作为LOAD输出 (common to all channels) 若需要Driven Shield 做按键屏蔽,则每个端口需要1个IO2.2.1 MCU 硬件资源 硬件资源2.2.2 MCU软件资源 软件资源STM8S系列触摸软件库对 MCU Flash的使用(库 + 常量)如下: 只有按键 按键 + 1滚轮/滑动条 按键 + 2 滚轮/滑动条 : ~ 1900 bytes : ~ 3800 bytes : ~ 3900 bytes页18/46 STM8S系列触摸软件库对RAM的使用如下: 只有按键 按键 + 1滚轮/滑动条 按键 + 2 滚轮/滑动条 : ~ 57 + (13*(Nb_keys -1)) : ~ 112 + (13*(Nb_keys -1)) : ~ 154 + (13*(Nb_keys -1))- 例1 :10 个按键的方案会占用174 bytes的RAM空间 - 例2 : 5 按键 + 1个 滚轮的方案会占用174 bytes的RAM空间2.2.3 MCU的选择 的选择在MCU的选择上,主要是要考虑引脚数量是否满足要求。目前ST提供的软件软件库可配置为支 持如下范围内的操作: 1) 所有按键分布在3个独立IO端口,每个触摸通道(按键)需要2个电阻和一个MCU 通用IO 口。 2) 2个IO端口用来配置滚轮/滑动条。 避免使用晶振所在的IO引脚,因为这些引脚的电容过大。 3) 在不使用Driven shield的情况下最多可支持24个按键和2个滚轮/滑动条。由于屏蔽信号 (Driven shield)需要占用每个端口的一个IO引脚,在这种情况下,最多只可支持21个按 键和2个滚轮/滑动条。引脚计算说明: 引脚计算说明: 在计算应用中所需的引脚时,应做如下考虑。 1) 所有按键共用1个LOAD脚,用作充放电控制。 2) 每个端口共用1个Driven Shield,并且这个Driven Shield脚必须配置在按键的同一个端口 内。例如,对于PA端口内有3个引脚作为按键使用,PB端口有5个引脚作为按键使用,那么 必须在PA端口和PB端口各分配一个引脚作为Driven Shield。 3) 每个滑动条或者滚轮根据库的配置可选择占用5个IO引脚或者8个IO引脚。这些引脚可以分 布在不同的端口上。例如应用需求: 资源: 1 Load+8key (8 GPIO+2 Driven shield)+ +1 Slide(5 IO) (5 GPIO +1Driven shield)根据上述应用需求, 所有的按键共用1个LOAD脚,占用1个IO引脚。 8个按键由于还需要加DrivenShield,因此必须分配在2个端口上,相应的每个端口各 需要一个Driven Shield。因此8个按键共需要(8 GPIO+2 Driven shield),共10个IO引 脚。 滑动条占用5个IO和1个Driven Shield,共6个IO引脚 因此,总共需要占用 17个IO口。用户在进行硬件IO口评估选型时,可参考上述方式进行计算。页19/46 2.3硬件设计触摸式按键方案的硬件设计可参考下图所示:图1触摸式按键方案的基本硬件设计下面以ST提供的STM8S系列触摸式按键评估板(如右图所示)的硬件为例,对基于STM8S系列芯片的 触摸式按键的硬件设计进行简单说明。评估板采用32脚的STM8S207K6T6作为触摸芯片,对5个 按键和1个滑动条进行采样,然后通过SPI将信息显示在 LCD屏上。 在基于STM8S系列芯片进行设计时,还有一些STM8S芯 片的硬件设计需要注意的地方: 电源:由于触摸式按键的方案对电源电压的变化相当 敏感,因此建议在电源输入端加入LDO以保持MCU的 供电电源稳定。 时钟:评估 板采用内 部16MHz的HSI作为芯片主时 钟。 去耦电容:STM8S系列芯片的每个Vdd引脚上都需要 放 置 去 耦 电 容 。 特 别 是 Vcap 引 脚 上 , 必 须 放 置 680Nf~1uF的去耦电容,以保证STM8S的内核工作正 常。图2STM8S触摸式按键评估板 触摸式按键评估板详细的原理图如下图所示,下一节将以此原理图为例,对STM8S触摸软件库的配置进行说明。页20/46 图3STM8S触摸式按键评估板 触摸式按键评估板(MB836)原理图 触摸式按键评估板 原理图页21/46 2.4软件设计本节以2.3中所述的STM8S触摸按键评估板为例,对用户的软件设计进行说明。用户的软件设 计部分主要是通过对库文件中的STM8_TSL_RC_Configuration.h头文件的配置来实现。2.4.1 软件库介绍STM8S系列触摸按键软件库基本结构如右图所示,分成下面几个部分: 采集层 Acquisition layer : I/O端口配置 RC 采集 后处理层 Post processing layer : 数据处理 状态机 应用程序接口 API : 与用户应用程序接口 函数 变量Application firmware LibraryAPI Post processing layer Acquisition layer Hardware: keys, IOs, Timers图4 基于上述软件库架构触摸按键软件库基本结构1) 用户软件通过API接口调用相应的函数启动按键信号采集,通过访问相应的变量来获得按键 的状态,以及通过对一些控制变量的配置来修改触摸式按键的工作参数。 2) 后处理部分是STM8S系列软件库的核心部分,包含了一些列的校准,滤波算法。通过ECS (环境处理系统)的处理,达到环境自适应的功能。 3) 采集部分主要通过对IO口以及定时器的控制来获得按键的充放电时间。用户软件用户软件需要调 用或访问的函数 和变量Application layer API layer Keys State Machine Main State Machine I/O driver Timer driver Services软件库核心: 软件库核心:校准 滤波 ECS(环境处理系统)采集 硬件外设 (GPIO和定时器 和定时器) 和定时器H/W layer图5 软件库架构页22/46 2.4.2 软件库的使用用户可以通过调用TSL_Init()函数对按键进行初始化,然后再以死循环的方式调用TSL_Action() 来获得按键的状态。如果用户有低功耗方面的要求可以通过Active Halt 的方式,定时调用 TSL_Action(),来获得按键状态。软件库调用举例: #include &STM8_TSL_RC_API.h& void main(void) { Application_Init(); TSL_Init(); for (;;) { TSL_Action(); Do_Application(); } } 运行用户应用程序 运行用户应用程序 进行按键扫描 触摸式按键库初始化 用户应用程序初始化2.4.3 头文件的配置用 户 对 按 键 的 初 始 化 在 TSL_Init() 内 完 成 , 而 TSL_Init() 函 数 会 以 STM8_TSL_RC_Configuration.h头文件中所定义的参数作为触摸式按键的默认参数,因此本 节主要对STM8_TSL_RC_Configuration.h头文件中的各项参数配置进行说明。1)芯片定义 ) 选择芯片系列:STM8S 或 STM8L#ifndef __TSL_CONFIGURATION__ #define __TSL_CONFIGURATION__ //============================= // 1) MCU FAMILY SELECTION //============================= //#define STM8L (1) /**& Select it if the STM8L MCU is used (value not used) */ #define STM8S (1) /**& Select it if the STM8S MCU is used (value not used STM8L STM8S 选择芯片型号:2)配置LOAD脚 )配置 脚 根据原理图,LOAD脚在PF4上,因此配置LOAD引脚端口为GPIOF,并配置相应的MASK位为 0x10。//====================================================== //2) REFERENCE LOAD I/O DEFINITION // Set the port // Set the pin mask页23/46 //====================================================== #define LOADREF_PORT_ADDR (GPIOF_BaseAddress) /**& LOADREF pin GPIO base address */ #define LOADREF_BIT (0x10) /**& LOADREF pin mask */定 义 LOAD脚 所 在 端口的基地址 定 义 LOAD 脚 的 MASK.3)第一个端口上按键引脚配置 )第一个端口上按键引脚配置 在PC端口上共设4个按键,分布在PC7,PC3,PC2,PC1上。因此定义此端口上的按键数量为4, 选择端口为GPIOC,并为4个按键配置MASK。另外,PC5作为Driven shield 使用,也要配置 相应的MASK.//================================================================= // 3) SINGLE CHANNEL KEYS DEFINITION - PORT 1 // Set the number of keys // Set the port // Set the pins mask // Warning: This port is mandatory and one key at least must be defined. //================================================================= #define SCKEY_P1_KEY_COUNT (4) /**& Single channel key Port 1: Number of keys used (value from 1 to 8) */ 定 义端 口 1的 按键 数量 定 义端 口 1的 按键 通道#define SCKEY_P1_PORT_ADDR (GPIOC_BaseAddress) /**& Single channel key 定义端口1的基地址 Port 1: GPIO base address */#define SCKEY_P1_A (0x02) #define SCKEY_P1_B (0x04) #define SCKEY_P1_C (0x08) #define SCKEY_P1_D (0x80) #define SCKEY_P1_E (0) #define SCKEY_P1_F (0) #define SCKEY_P1_G (0) #define SCKEY_P1_H (0)/**& Single channel key Port 1: 1st key mask */ /**& Single channel key Port 1: 2nd key mask */ /**& Single channel key Port 1: 3rd key mask */ /**& Single channel key Port 1: 4th key mask */ /**& Single channel key Port 1: 5th key mask */ /**& Single channel key Port 1: 6th key mask */ /**& Single channel key Port 1: 7th key mask */ /**& Single channel key Port 1: 8th key mask */定 义端 口 1上 按键 的MASK.#define SCKEY_P1_DRIVEN_SHIELD_MASK (0x20)/定 义端 口 1内 按键 的 Drivenshield 的 MASK.4)第二个端口上按键引脚配置 第二个端口上按键引脚配置 在PD端口上共设4个按键,分布在PD4,PD3,PD2,PD0上。因此定义此端口上的按键数量为4, 选择端口为GPIOD,并为4个按键配置MASK。另外,PD7作为Driven shield 使用,也要配置 相应的MASK.//================================================================= // 4) SINGLE CHANNEL KEYS DEFINITION - PORT 2 // Set the number of keys 定义端口2的按 键通道页24/46 // Set the port // Set the pins mask // Note: This port is optional. Set SCKEY_P2_KEY_COUNT to 0 to not use this port. //================================================================= #define SCKEY_P2_KEY_COUNT (4) /**& Single channel key Port 2: Number of keys used (value from 0 to 8) */ 定 义 端 口 2的 按 键数量#define SCKEY_P2_PORT_ADDR (GPIOD_BaseAddress) /**& Single channel key Port 2: GPIO base address */定义端口2的基 地址#define SCKEY_P2_A (0x01) #define SCKEY_P2_B (0x04) #define SCKEY_P2_C (0x08) #define SCKEY_P2_D (0x10) #define SCKEY_P2_E (0) #define SCKEY_P2_F (0) #define SCKEY_P2_G (0) #define SCKEY_P2_H (0)/**& Single channel key Port 2: 1st key mask */ /**& Single channel key Port 2: 2nd key mask */ /**& Single channel key Port 2: 3rd key mask */ /**& Single channel key Port 2: 4th key mask */ /**& Single channel key Port 2: 5th key mask */ /**& Single channel key Port 2: 6th key mask */ /**& Single channel key Port 2: 7th key mask */ /**& Single channel key Port 2: 8th key mask */定义端口2上按 键的MASK.#define SCKEY_P2_DRIVEN_SHIELD_MASK (0x80)定义端口2内按 键 的 Driven shield 的MASK.5)第三个端口上按键引脚配置 第 本方案没有用到第三个端口,所以参数设为0.//================================================================= // 5) SINGLE CHANNEL KEYS DEFINITION - PORT 3 // Set the number of keys // Set the port // Set the pins mask // Note: This port is optional. Set SCKEY_P3_KEY_COUNT to 0 to not use this port. //================================================================= #define SCKEY_P3_KEY_COUNT (0) /**& Single channel key Port 3: Number of keys used (value from 0 to 8) */ 定 义 端 口 3的 按 键数量 ( 端 口 3无 按 键 则数量为0) 定 义 端 口 3的 按 键通道#define SCKEY_P3_PORT_ADDR (0) /**& Single channel key Port 3: GPIO base address */#define SCKEY_P3_A (0) #define SCKEY_P3_B (0) #define SCKEY_P3_C (0) #define SCKEY_P3_D (0) #define SCKEY_P3_E (0) #define SCKEY_P3_F (0) #define SCKEY_P3_G (0) #define SCKEY_P3_H (0)/**& Single channel key Port 3: 1st key mask */ /**& Single channel key Port 3: 2nd key mask */ /**& Single channel key Port 3: 3rd key mask */ /**& Single channel key Port 3: 4th key mask */ /**& Single channel key Port 3: 5th key mask */ /**& Single channel key Port 3: 6th key mask */ /**& Single channel key Port 3: 7th key mask */ /**& Single channel key Port 3: 8th key mask */页25/46 #define SCKEY_P3_DRIVEN_SHIELD_MASK (0)6)配置滑动条或者滚轮的数量 ) 本例使用了1个滑动条,配置为1。//================================================================= // 6) NUMBER OF MULTI CHANNEL KEYS AND NUMBER OF CHANNELS USED // Set the total number of multi channel keys used (0, 1 or 2) // Set the number of channels (5 or 8) //================================================================= #define NUMBER_OF_MULTI_CHANNEL_KEYS (1) /**& Number of multi channel keys (value from 0 to 2) */ #define CHANNEL_PER_MCKEY (possible values are 5 or 8 only) */ (5) /**& Number of channels per key 定 义 所 使 用 的 Slider/Wheel 的 数 量为1 定 义 Slider/Wheel 所使用的引脚数量 为5个IO. 定 义 所 使 用 的 Slider/Wheel通道7)第一个滑动条或者滚轮的引脚定义 ) 一个滑动条或者滚轮的引脚定义 与(3)中的按键定义类似//================================================================= // 7) MULTI CHANNEL KEY 1 DEFINITION // Set the port used // Set the pins mask // Note: This key is optional //================================================================== #if NUMBER_OF_MULTI_CHANNEL_KEYS & 0 如果有滑动条或 者滚轮的话 Slider/Wheel 的 引脚配置#define MCKEY1_A_PORT_ADDR (GPIOD_BaseAddress) /**& Multi channel key 1: 1st channel port */ #define MCKEY1_A (0x40) /**& Multi channel key 1: 1st channel mask */为滑动条或者滚 轮的每个电极定 义一个引脚#define MCKEY1_B_PORT_ADDR (GPIOD_BaseAddress) /**& Multi channel key 1: 2nd channel port */ #define MCKEY1_B (0x20) /**& Multi channel key 1: 2nd channel mask */#define MCKEY1_C_PORT_ADDR (GPIOD_BaseAddress) /**& Multi channel key 1: 3rd channel port */ #define MCKEY1_C (0x10) /**& Multi channel key 1: 3rd channel mask */#define MCKEY1_D_PORT_ADDR (GPIOD_BaseAddress) /**& Multi channel key 1: 4th channel port */ #define MCKEY1_D (0x08) /**& Multi channel key 1: 4th channel mask */#define MCKEY1_E_PORT_ADDR (GPIOD_BaseAddress) /**& Multi channel key 1: 5th channel port */ #define MCKEY1_E (0x04) /**& Multi channel key 1: 5th channel mask */ /**& Multi channel key 1: 6th channel port */ /**& Multi channel key 1: 6th channel mask */#define MCKEY1_F_PORT_ADDR (0) #define MCKEY1_F (0)页26/46 #define MCKEY1_G_PORT_ADDR (0) #define MCKEY1_G (0)/**& Multi channel key 1: 7th channel port */ /**& Multi channel key 1: 7th channel mask */ /**& Multi channel key 1: 8th channel port */ /**& Multi channel key 1: 8th channel mask */#define MCKEY1_H_PORT_ADDR (0) #define MCKEY1_H (0)#define MCKEY1_TYPE (1) 1=slider */ #define MCKEY1_LAYOUT_TYPE (0) 0=interlaced, 1=normal *//**& Multi channel key 1 type: 0=wheel, /**& Multi channel key 1 layout type:#define MCKEY1_DRIVEN_SHIELD_MASK (0)#endif8)第二个滑动条或者滚轮的引脚定义 ) 二个滑动条或者滚轮的引脚定义 与(3)中的按键定义类似//====================================================================== // 8) MULTI CHANNELbbs KEY 2 DEFINITION // // Set the port used // Set the pins mask // // Note: This key is optional. //====================================================================== #if NUMBER_OF_MULTI_CHANNEL_KEYS & 1#define MCKEY2_A_PORT_ADDR (0) #define MCKEY2_A (0)/**& Multi channel key 2: 1st channel port */ /**& Multi channel key 2: 1st channel mask */ /**& Multi channel key 2: 2nd channel port#define MCKEY2_B_PORT_ADDR (0) 。。。(略) 略9)为每个IO端口定义一个屏蔽位,组成一个屏蔽字节 )为每个 端口定义一个屏蔽位 组成一个屏蔽字节GPIOX_ELECTRODES_MASK 端口定义一个屏蔽位, 屏蔽位包括所有的按键引脚和滑动条或滚轮引脚,但是不包含LOAD脚。//================================================================= // 9) ELECTRODES MASKS USED ON EACH GPIO // // Define the electrodes mask for each GPIO used (SCKeys + MCKeys but not LOADREF) //================================================================= #define GPIOA_ELECTRODES_MASK (0x00) #define GPIOB_ELECTRODES_MASK (0x00) #define GPIOC_ELECTRODES_MASK (0x8E) #define GPIOD_ELECTRODES_MASK (0x7D) /**& Electrodes mask for GPIOA */ /**& Electrodes mask for GPIOB */ /**& Electrodes mask for GPIOC */ /**& Electrodes mask for GPIOD */ GPIOC的MASK 为所有使用到的 GPIO定义MASK: SCKeys + MCKeys (不包括LOAD脚)页27/46 #define GPIOE_ELECTRODES_MASK (0x00) #define GPIOF_ELECTRODES_MASK (0x00) #define GPIOG_ELECTRODES_MASK (0x00) #define GPIOH_ELECTRODES_MASK (0x00) #define GPIOI_ELECTRODES_MASK (0x00)/**& Electrodes mask for GPIOE */ /**& Electrodes mask for GPIOF */ /**& Electrodes mask for GPIOG */ /**& Electrodes mask for GPIOH */ /**& Electrodes mask for GPIOI */GPIOD的MASK10)参数配置 ) //信号采集部分参数配置 信号采集部分参数配置#define SCKEY_ACQ_NUM #define SCKEY_ADJUST_LEVEL (3) (1) /**& 按键键采集次数 - N (范围:1~255). */ /**& 按键键采集调整值。完成一次完整采集后获得的测 n 量值可根据需要进行调整:=采集值/2 .例如,设为1, 则为采集值/2.*/ /**& 滑动条电极采集次数 - N(范围:1~255) */ /**& 滑动条电极采集调整值,1表示将采集值右移1位, 即除以2.*/VLoad#define MCKEY_ACQ_NUM #define MCKEY_ADJUST_LEVEL(6) (1)1次完整的采集 (N=3 次测量)1 次测量Signal @ key 1Load RGPI/oSTM8 or STM32GPI/o Key 1 Electrode Capacitance (Cx)8 次单元测量 = 1 次测量1 次单元测量 = 充电 + 放电图6按键采集波形// IO 采集最大无效次数和最大最小测量值#define MAX_REJECTED_MEASUREMENTS(100) /**&最大无效测量次数:当检测到的值超出最大最小范围 时会产生一次Reject.如果被Reject 的次数超过这个设定 的最大值,则认为周围噪声过大,程序会将这个按键屏 蔽掉,不再进行检测*/ /**& 用来计算最大有效测量值的系数,在第一次进行测#define MAX_MEAS_COEFF(0x0126)页28/46 量时,将测量值与这个系数相乘,获得最大有效的测量 值。在以后的每次测量中,得到的测量值都必须小于这 个最大值,否则就会认为是一次Reject。*/ #define MIN_MEAS_COEFF (0x00D9) /**& 用来计算最小有效测量值的系数,在第一次进行测 量时,将测量值与这个系数相乘,获得最小有效的测量 值。在以后的每次测量中,得到的测量值都必须大于这 个最小值,否则就会认为是一次Reject。*/// 门限值#define SCKEY_DETECTTHRESHOLD_DEFAULT (12) /**& 按键检测“按下”门限值:当检测到的 值减去参考值的差值大于这个门限值,则认 为按键被按下。(范围:1 ~127) */ /**&按键检测“释放”门限值:当检测到的 值减去参考值的差值小于这个门限值,则认 为按键被释放。(范围:1 ~127) */ /**&按键重校验门限值:当检测到的值减去参 考值的差值小于这个门限值,则认为需要进 行重校验。(范围:-1~ -128) */ /**&滑动条或滚轮电极检测“按下”门限值, (参考上面按键说明)*/ /**&滑动条或滚轮电极检测“释放”门限值, (参考上面按键说明)*/ /**&滑动条或滚轮电极重校验门限值,(参考 上面按键说明)*/#define SCKEY_ENDDETECTTHRESHOLD_DEFAULT(7)#define SCKEY_RECALIBRATIONTHRESHOLD_DEFAULT (-7)#define MCKEY_DETECTTHRESHOLD_DEFAULT(100)#define MCKEY_ENDDETECTTHRESHOLD_DEFAULT(60)#define MCKEY_RECALIBRATIONTHRESHOLD_DEFAULT (-60)// 滑动条或滚轮分辨率 滑动条或滚轮分辨率#define MCKEY_RESOLUTION_DEFAULT (4) /**&设定滑动条或滚轮的分辨率为多少位,4 即表示4位分辨率。 */// 滑轮或滚动条方向改变处理 滑轮或滚动条方向改变处理#define MCKEY_DIRECTION_CHANGE_ENABLED (1) /**&滑动条或滚轮方向使能(1)或禁止 (0) :使能的话,会进行当前方向是顺 时针还是逆时针的判断,供用户使 用。*/ /**&方向改变最大位移(0~255) ,即 允许在滑动条中出现的最大位移。*/ /**& 滑动条或滚轮方向判断去抖动因 子,即要连续检测到几次方向改变才 认为是方向改变。(范围:1~255) */ /**&方向改变门限值(1~255) ,即只 有检测到位移大于这个门限值,才认 为出现方向改变。*/#define MCKEY_DIRECTION_CHANGE_MAX_DISPLACEMENT (255)#define MCKEY_DIRECTION_CHANGE_INTEGRATOR_DEFAULT (1)#define MCKEY_DIRECTION_CHANGE_THRESHOLD_DEFAULT (30)页29/46 // 按键去抖动#define DETECTION_INTEGRATOR_DEFAULT (2) /**& 按 键 “ 按 下 ” 去 抖 动 滤 波 器 ( 范 围 : 0 to 255):若设为2,则需要连续检测到3次按键按 下,才认为是按键按下。 */ /**& 按 键 “ 释 放 ” 去 抖 动 滤 波 器 ( 范 围 : 0 to 255):若设为2,则需要连续检测到3次按键释 放,才认为是按键释放。 */ /**&“重校验”去抖动滤波器(范围:0 to 255): 若设为10,则需要连续满足10次进行重校验的条 件才进行重校验。*/#define END_DETECTION_INTEGRATOR_DEFAULT (2)#define RECALIBRATION_INTEGRATOR_DEFAULT(10)图7按键“按下” 按键“按下”去抖动处理图8按键“释放” 按键“释放”去抖动处理// IIR 滤波器 由于电容式触摸方案对外界环境的变化比较敏感,因此采用数字低通滤波器在按键没有按下的 情况下,根据环境的变化对参考值进行调整,以避免产生误动作。基本原理如下图,按键的参 考值会随着外界环境的变化(主要是温度、湿度)而增大或者减小,以适用于各种环境。页30/46 图9 滤波器的参数可根据用户需要进行配置#define ECS_TIME_STEP_DEFAULT (20) #define ECS_TEMPO_DEFAULT #define ECS_IIR_KFAST_DEFAULT (20) (20)ECS 原理/**&采样频率,单位:10ms */ /**& 按键按过后的延迟时间,单位: 100ms */ /**& 当参考值减小时使用的K系数*/ /**& 当参考值增大时使用的K系数 */#define ECS_IIR_KSLOW_DEFAULT (10)图10IIR滤波器原理框图 滤波器原理框图// 超时#define DTO_DEFAULT (10) /**& 按键按下超时,单位:1s (范围:0~ 255,0= 无限长) */// 自动校验#define NEGDETECT_AUTOCAL (1) /**&是否开启自动校验功能,开启此功能后,一旦检测到的值超 出 SCKEY_RECALIBRATIONTHRESHOLD_DEFAULT 或 者 MCKEY_RECALIBRATIONTHRESHOLD_DEFAULT定义的范围 就会自动进行重校验,产生一个新的参考值。 1:使能自动校 验 ,0:禁止。 */// 采集值限制#define SCKEY_MIN_ACQUISITION (50) /**& 按键测量值的最小值,小于这个最小值则将按键状态配置为 ERROR. */页31/46 #define SCKEY_MAX_ACQUISITION (3000)/**& 按键测量值的最大值,大于这个最大值则将按键状态配置为 ERROR. */ /**& 滑动条或滚轮的一个电极测量值的最小值,小于这个最小值 则将电极状态配置为ERROR. */ /**& 滑动条或滚轮的一个电极测量值的最大值,大于这个最大值 则将电极状态配置为ERROR. */#define MCKEY_MIN_ACQUISITION (75)#define MCKEY_MAX_ACQUISITION (5000)// 滑动条或滚轮多个电极的标准化处理 动条或滚 或滚轮 滑动条或者滚轮的不同通道由于硬件方面的原因,按键本身的电容可能略有差别,图11所示即 是滑动条的不同通道各自的采集曲线。显然,这种差异会使得不同的通道的灵敏度出现差异。 STM8S的触摸软件库通过对这些不同通道的采集值进行标准化处理,而是的整个滑动条在有效 范围内的灵敏度保持一致。标准化处理后的曲线图如图12所示,Delta CH1 CH3CH0CH4CH20o120o240oFinger position (angle)图11滑动条各个通道的采集曲线DeltaCH0CH1CH2CH3CH40o图12120o240oFinger position 360o (angle)进行标准化处理后的滑动条各个通道采集曲线下面的参数就是对评估板的5个通道进行标准化的参数值。这个参数总共16位,高8位为整数部 分,低8位为小数部分。 例如,如果需要标准化的参数是1.10页32/46 高8位 MSB = 0x01 低8位 LSB = 0.1 x 256 = 25.6 = 0x19 因此最终得到标准化参数 = 0x 0119// 第一个滑动条的标准化参数 #define MCKEY1_DELTA_COEFF_A (0x012D) /**&第一个滑动条通道A的标准化参数 */ #define MCKEY1_DELTA_COEFF_B (0x0109) /**&第一个滑动条通道B的标准化参数*/ #define MCKEY1_DELTA_COEFF_C (0x0100) /**&第一个滑动条通道C的标准化参数*/ #define MCKEY1_DELTA_COEFF_D (0x0114) /**&第一个滑动条通道D的标准化参数*/ #define MCKEY1_DELTA_COEFF_E (0x014D) /**&第一个滑动条通道E的标准化参数*/ #define MCKEY1_DELTA_COEFF_F (0x0100) /**&第一个滑动条通道F的标准化参数*/ #define MCKEY1_DELTA_COEFF_G (0x0100) /**&第一个滑动条通道G的标准化参数*/ #define MCKEY1_DELTA_COEFF_H (0x0100) /**&第一个滑动条通道H的标准化参数*/ //第二个滑动条的标准化参数 #define MCKEY2_DELTA_COEFF_A (0x0100) /**&第二个滑动条通道A的标准化参数*/ #define MCKEY2_DELTA_COEFF_B (0x0100) /**&第二个滑动条通道B的标准化参数*/ #define MCKEY2_DELTA_COEFF_C (0x0100) /**&第二个滑动条通道C的标准化参数*/ #define MCKEY2_DELTA_COEFF_D (0x0100) /**&第二个滑动条通道D的标准化参数*/ #define MCKEY2_DELTA_COEFF_E (0x0100) /**&第二个滑动条通道E的标准化参数*/ #define MCKEY2_DELTA_COEFF_F (0x0100) /**&第二个滑动条通道F的标准化参数*/ #define MCKEY2_DELTA_COEFF_G (0x0100) /**&第二个滑动条通道G的标准化参数*/ #define MCKEY2_DELTA_COEFF_H (0x0100) /**&第二个滑动条通道H的标准化参数*/2.4.4 软件库中的状态机STM8S触摸按键软件库中按键状态的变化如图13状态机所示:按键短路或者断路IDLE“去抖动 滤波器临时状态 去抖动” 去抖动PRE CALIBRATIONPRE DETECTEDDISABLEDERRORDETECTED CALIBRATIONPOST DETECTEDInit按键被软件禁止图13按键状态机系统上电后,按键处于禁止状态(DISABLED),在对按键进行初始化后,按键被使能。使能后 首先进行校验(CALIBRATION),校验完成后,按键处于释放状态(IDLE)。一旦有按键按 下,如果被确认为按下,则进入按下(DETECTED)状态。任何在“校验”,“释放”,“按页33/46 下”情况下检测到短路或者断路都会进入故障(ERROR)状态。此外,对于“按下”和“释 放 ” 以 及 “ 校 验 ” 状 态 都 存 在 一 个 去 抖 动 滤 波 器 所 用 到 的 中 间 状 态 , 分 别 为 “ POST DETECTED”,“PRE DETECTED”和“PRE CALIBRATION”。软件库对按键的扫描和处理采用分批进行的方式。将所有的按键信号采集,后处理,环境自适 应环节分配在整个程序的不同时刻执行,从而保证用户的应用程序能够及时的被处理和执行。 图14为软件库程序处理流程。图14软件库处理流程页34/46 3PCB 设计方针 设计方针在进行电容式感应方案的PCB设计时,不仅需要考虑直接与触摸相关的电路。整个电路都 会对触摸感应元件及其信号线的电容产生影响。大多数情况下,PCB设计会对灵敏度产生负面 作用。诸如电容,连接器件,电阻,LED等等都会增加触摸按键的寄生电容。甚而,那些与感 应无关的部分电路也会对感应元件产生影响从而使性能降低。 因此在设计电容式感应方案时,必须对整个板的布局仔细检查并优化。3.1板的面积对电容式感应方案来说,只有被按键及其信号线覆盖的那部分区域是重要的。可以通过减少控 制器和按键之间距离的方法来缩小面积。将芯片防止于所有按键中间是比较好的一种优化板子 面积的方法。3.2地平面建议在按键以及信号线下面不要铺设任何电源面。 在按键信号线下面走地或者电源层,会增加按键对低的寄生电容,从而降低灵敏度。 若需要在按键下面铺设地平面,必须采用网格状铺设并且铺铜量小于40%(如图15)并且铺设 在尽量远的层上,在获得好的屏蔽效果的基础上减少了寄生电容。 在噪杂环境中,最灵敏的部分可能会需要铺设地平面。图15地平面设计示例不要在信号线附近保留死铜,避免妨碍感应信号的辐射,并减少意外的影响。图16地平面设计示例页35/46 3.3Driven ShieldDriven Shield的目的是要在Shield线上通过与按键电极相同的信号。 用Driven Shield代替地屏蔽有以下优点: 电极和Shield之间寄生电容不再需要被充电。这样就不会由于寄生电容的存在影响灵敏 度。 有利之处: RC软件库可以利用“LOAD”信号来驱动Shield 也可利用专门的引脚来驱动shield,例如STM8T系列产品 Driven Shield 的屏蔽作用适用于以下场合: 将触摸按键与嘈杂环境隔离。 去除在按键和芯片之间的电缆或走线对灵敏度的影响。 增强有移动金属靠近感应设备时的性能。图17RC 库3.4通讯线隔离不要将电容感应按键走线靠近高频通讯线,例如I2C或者SPI master。高频通讯线会影响电容按 键的性能。 如果必须在触摸按键引脚间穿过通讯线,则必须确保直角交叉,如图18,图19。图18感应线和通讯线在某层上的处理页36/46 图19感应线与通讯线在多层板中的处理 感应线与通讯线在多层板中的处理一个有效的减少通讯线与感应线之间交互作用的方法就是将所有触摸按键的引脚选择在芯片的 同一侧。 图20为32pin QFN封装利用这种隔离方式的例子。通讯和寻址引脚分配在一侧,而感应按键分 配在另一侧。图20通讯线与感应引脚的端口隔离3.5LED的使用 的使用LED在用户板上常被放置于电容式感应按键的附近。这些二极管用来指示按键是否被按下。当 设计带有LED的应用板时,必须做以下考虑: LED在打开和关闭时会改变电容 LED在打开和关闭时驱动线上的阻抗会发生变化 LED的负载电流会影响电源 如果LED非常靠近传感器并且会被经常点亮,推荐在LED或者驱动线上加旁路电容(&1nF)。 LED的两端必须都有确定的低阻抗路径到地或者电源。否则必须加旁路电容以抑制高阻态出 现。 图8中LED上旁路电容的例子也适用于晶体管。页37/46 图21LED旁路电容举例 旁路电容举例3.6稳压器强烈推荐在板子的供电电源上加稳压器。稳压器应该放在离感应线和感应设备尽量远的地方。 稳压器对于电源上的传导干扰也会起到滤波的作用。页38/46 4按键和单元设计一个好的PCB设计的目标就是要尽量减小不包含诸如铜之类传导材料的(非感应)单元,对按 键,滑动条和触摸垫的的影响。 在进行PCB设计时,应做如下考虑: MCU到电极间的走线要尽量短(尽可能&100mm) 在PCB技术可能的情况下,走线尽量的细 将阻性负载尽可能的靠近控制器 对触摸按键来说,相邻按键的走线之间的距离至少要保证大于2倍的线宽图22 感应单元感应单元定义PCB设计的目标是要尽可能的减小单元间的交互作用,或者说,如果不能减小的话,对所有的 电容式单元来说,要保持这种交互作用不变。 尽管用来采集触摸按键信号的触摸感应控制器算法已经考虑到了每个阵列的电容是存在差异 的,但是在设计中仍应考虑尽可能使其平衡。 同一个引脚组的走线可以放在一起,如图22。 下面的几节描述了最有可能的因素并且为设计一个好的板子提供了设计方针。4.1表面电容按键表面电容按键由一个连接到设备的单端铜电极组成。它不必非常灵敏,因为它仅仅需要感应是 否有手指按下或者释放。4.1.1 形状电容式触摸感应的按键可以使用任意的形状。图23为可能采用的一些形状。形状的不同不会影 响感应特性,只是与板子的美观有关。页39/46 图23可能的按键形状举例4.1.2 尺寸在相同条件下,大的按键要更好一些。2个通过一样的走线连接到设备的按键,如果他们的尺寸 不同,可能会有不同的灵敏度。 一个非常小的按键的表面积很小,因此它的接触电容(CT)更小,从而可能灵敏度较差。 过分增大按键的面积也不能提高CT。 然而,增大按键表面积,使其与被感应的物体(手指,大拇指等等)的大小接近将会增大CT。图24按键尺寸和手指尺寸对于手指感应来说,建议按键的尺寸为直径至少为10mm。更小的按键也可以工作,但是性能 会有所下降。 大的按键具有更高的灵敏度,但是尺寸的上限受接触物体的大小限制。4.1.3 按键 按键的距离 按键-按键的距离相邻的按键可以正常工作,但是若按键之间的距离过小,可能会产生意想不到的交互作用。4.1.4 按键 地的距离 按键-地的距离可能的话,地平面应该尽量不与感应元件放在同一个层上。 将地平面放置在非常接近感应元件的地方会增加电容,从而影响对手指按下的检测。4.2滑动条滑动条是一系列排成一直线的连续相邻的连接到设备的电容式目标单元。典型的滑动条是直线 的,只在一个轴上有效。 根据需要的尺寸和分辨率,由5或者8个单元组成。 滑动条利用相邻容性单元的电容改变差异来对导体的中心位置定位,以获得更高的分辨率。页40/46 4.2.1 滑动条的尺寸和布局滑动条的设计多种多样。 滑动条的布局由滑动条的尺寸和目标应用决定。 要确保一个导电物体可以同时影响到1个以上的感应单元,那么每个感应单元必须足够小以使得 手指可以覆盖到它的边缘以外。同时,也必须足够大到能够感应到表面的覆盖。图25小的带5个单元的滑动条( 小的带 个单元的滑动条(20mm-50mm长) 个单元的滑动条 长对中等或更大的滑动条,需要获得更多的重合区域,以获得更大的变化差异,可以使用锯齿状 的样式。 也可以通过使用8个单元来获得更好的分辨率。图26中等/大的滑动条(40mm-60mm长) 中等 大的滑动条( 长 大的滑动条图27锯齿状样式4.2.2 间距滑动条单元与环绕的地平面的间距与按键的要求一致。滑动条单元与地平面间0.02inch(0.5mm) 的间距足够降低其对感应的影响。4.2.3 交叉采用交叉方式通常可以比采用邻近方式获得更好的分辨率。但是这种方式对于手的阴影产生的 影响更敏感。 用交叉方式取代邻近方式的有利之处取决于滑动条的具体应用。将两个滑动条单元连接到同一 个引脚增加了用来感应的滑动条单元的数量。如图28为交叉方式的例子,在交叉方式的滑动条 中至少要使用5个引脚。表1列出了一些基本的交叉方式。页41/46 图15也表示了相对于手指的位置,设备所收集到的数据。连接到某个引脚的两个感应单元的电 容都增加了。尽管有超过1个地方的位置被检测到电容的改变,但只有其中一个地方相邻的单元 的电容也有增大。图28交叉式滑动条示例( 个电极 个电极) 交叉式滑动条示例(10个电极)当在3个连续的通道上检测到信号,就表示手指接触到了那个区域。 表2 常用的交叉表 滑动条 5个引脚,11个单元 8个引脚,17个单元 交叉表 1 2 3 4 5 1 3 5 2 4 1 1 2 3 4 5 6 7 8 1 4 7 2 5 8 3 6 14.3滚轮图29基本的滚轮例子( 个电极 个电极) 基本的滚轮例子(8个电极)与滑动条一样,滚轮也是将一系列相邻的电容式目标(排列成圆形)连接到控制器引脚。它由5 个或者8个单元组成,也可以象滑动条那样,采用交叉方式,或者直接连接。4.4电容式感应走线电容式感应控制器和感应器之间的走线由于增大了电容会减低感应器的灵敏度,降低信号强 度。走线的长度由于增加了感应电路的并行电容,并且这个并行电容的大小与手指位置无关, 因此会降低灵敏度。走线的长度增加了,会导致在走线路径上收集内部电路和外部电路的噪 声。页42/46 4.4.1 长度缩短设备到感应器之间的走线会减少从其他设计单元耦合进干扰信号的风险。最好尽可能的缩 短触摸感应控制器到感应器的距离。4.4.2 宽度走线宽度由于对系统来说增加了铜箔的面积,从而增加了感应器的电容。此外也增加与其它层 上的耦合。因此,无论如何,走线应该尽可能保持细并且远离地。4.4.3 分组触摸式感应控制器属于同一个端口的的每个引脚可以由软件库同时驱动,并且由软件定义在同 一个组里。 在同一个组里的所有引脚的走线之间的距离保证为最小间距即可。页43/46 55.1附录STM8S触摸式按键评估板 触摸式按键评估板页44/46 5.2STM8S触摸式按键评估板原理图 触摸式按键评估板原理图页45/46 5.3参考资料列表数据手册( 数据手册(Datasheet) )1) 2) 3) 4) STM8S207xx STM8S208xx Performance line, 24 MHz. 8-bit MCU, up to 128 Kbytes Flash,integrated EEPROM,10-bit ADC, timers, 2 UARTs, SPI, IC, CAN Datasheet. STM8S105xx Access line, 16 MHz, STM8S 8-bit MCU, up to 32 Kbytes Flash, integrated EEPROM, 10-bit ADC, timers, UART, SPI, IC Datasheet. STM8S103xx Access line, 16 MHz STM8S 8-bit MCU, up to 8 Kbytes Flash, data EEPROM,10-bit ADC, 3 timers, UART, SPI, IC Datasheet STM8S903K3 16 MHz STM8S 8-bit MCU, up to 8 Kbytes Flash, 1 Kbyte RAM,640 bytes EEPROM,10-bit ADC, 2 timers, UART, SPI, IC Datasheet应用笔记( 应用笔记(Application Note) )1) 2) 3) AN2869 Guidelines for designing touch sensing applications AN2927 RC acquisition principle for touch sensing applications AN2860 EMC guidelines for STM8S microcontrollers固件库( 固件库(Firmware Library) )1) STM8S Touch Sensing Library ) 2) STM8S firmware library )用户手册( 用户手册(User Manual) )1) UM0761 STM8S touch sensing evaluation board user manual参考手册( 参考手册(Reference Manual) )1) RM0016 STM8S microcontroller family页46/46
赞助商链接
一款基于 STM8S 系列单片机的洗碗机控制器设计及实现...软件结构 洗碗机在欧美已广泛应用于普通家庭的厨房中...本文主要讨论的是家用喷淋式全自动洗碗机的设计方案及...基于STM8 的电容感应式触摸按键方案在电磁炉中的应用 1、引言 相较于机械式按键和电阻式触摸按键,电容式触摸按键不仅耐用,造价低廉,结构简单易于安装,防水防污,...ST 开发了一套完整的触摸感 应软件库,可以把任一...【应用笔记】如何基于ST... 46页 免费 Application...如何开始STM8S系列单片机... 40页 5下载券 STM8...的资料实在太少,都是官方的 应用资料,没有什么入门介绍,连需要安装什么软件都...如何基于STM8S系列单片机... 46页 1下载券 伯兮科技单片机keil c开... 20页...ST 开发了一套完整的触摸感应软件库,可以把任一 ...【应用笔记】如何基于ST... 46页 免费 【应用笔记...STM8S系列单片机开发环境... 9页 4下载券 PIC系列...8. 简述单片机应用系统的开发过程。 (1)根据应用系统的要求进行总体设计 总体...Keil 软件提供了包括宏汇编、链接器、库 管理和仿真调试器在内的完整开发方案,...原理及应用》大作业_工作计划_计划/解决方案_实用...单片机采用 AT89S51 系列, 这种单片机应用简单, ...以及数码管电路等,而软件部 分,则依据要实现的功能...最新单片机原理与应用习题参考答案(高惠芳版)_教育学_高等教育_教育专区。《单片机原理与应用技术》 (高惠芳版)习题参考答案: 间: 第二章(p38) 1) 64KB 片内...基于stm8单片机智能寻迹_电子/电路_工程科技_专业资料...因为项目涉及硬件设计、软件系统的设计与 调试,这个...- 11 - 参考文献 1 STM8S105xx 系列数据手册(...STM8S开发入门教程_信息与通信_工程科技_专业资料。最近 ST 在国内大力推广他的8位高性价比单片机 STM8S 系列,感觉性能上还是非常不错 的,网上稍微看了点资料,...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 合泰单片机开发工具 的文章

 

随机推荐