原创 STM8 触摸调试笔记

2014-7-4 09:39 4888 25 12 分类: MCU/ 嵌入式

使用了最便宜的STM8S003F3
使用内部16M振荡器。
将一个STM8的工程里加入STM8S_TouchSensing_Lib_V2.5.0
修改CONFIG文件。

编译时报错,TIM3没有定义。查了一下手册发现这个MCU没有TIM3。
按照触摸库配的说明文件,改为。
#define TIMACQ           (TIM2)
#define TIMACQ_CNTR_ADD  (0x530C)

官方文件中的TIMACQ_CNTR_ADD  是错误的。这个应该是计数地址高位。看了一下手册发现低位在0x530D。这个STM8居然用的是BIG

ENDIAN。

编译成功后,按键还是没有反应。
刚开始认为可能时钟与参考设计不一样,时基中断可能没有运行,但用ST-LINK跟踪发现没有这个问题。

跟踪时发现
sSCKeyInfo  中的SETTING 项 没有ENABLE 于是增加下面的初始化程序


  for (i = 0; i < NUMBER_OF_SINGLE_CHANNEL_KEYS; i++)
  {
    sSCKeyInfo.Setting.b.IMPLEMENTED = 1;
    sSCKeyInfo.Setting.b.ENABLED = 1;
    sSCKeyInfo.DxSGroup = 0x00; /* 0x00 = DxS disabled, other values = DxS enabled */
  }

结果
sSCKeyInfo 中State 项报错。
sSCKeyInfo[0].Channel.LastMeas 检测结果为0 

查看手册。检查波形。发现LOAD处一直为低。其它地方没有反应。
我的LOAD用的是PB4 查手册才发现PB4 是OD 的。使用一个10K电阻上拉。按键终于可以检测了。

判断哪个按键是否检测到可以用
if ((TSL_GlobalSetting.b.CHANGED) && (TSLState == TSL_IDLE_STATE)){
       UART1_SendStr("Key detected!\r\n");
       if(sSCKeyInfo[0].Setting.b.DETECTED)
         GPIO_WriteReverse(LED_GPIO_PORT1, (GPIO_Pin_TypeDef)LED_GPIO_PINS1);        
       if(sSCKeyInfo[1].Setting.b.DETECTED)
         GPIO_WriteReverse(LED_GPIO_PORT2, (GPIO_Pin_TypeDef)LED_GPIO_PINS2);
       if(sSCKeyInfo[2].Setting.b.DETECTED)
         GPIO_WriteReverse(LED_GPIO_PORT3, (GPIO_Pin_TypeDef)LED_GPIO_PINS3);
       if(sSCKeyInfo[3].Setting.b.DETECTED){
         GPIO_WriteReverse(LED_GPIO_PORT2, (GPIO_Pin_TypeDef)LED_GPIO_PINS2);
         GPIO_WriteReverse(LED_GPIO_PORT3, (GPIO_Pin_TypeDef)LED_GPIO_PINS3);
       }
       if(sSCKeyInfo[4].Setting.b.DETECTED){
         GPIO_WriteReverse(LED_GPIO_PORT1, (GPIO_Pin_TypeDef)LED_GPIO_PINS1);
         GPIO_WriteReverse(LED_GPIO_PORT2, (GPIO_Pin_TypeDef)LED_GPIO_PINS2);        
       }
    }

if(sSCKeyInfo[0].Setting.b.DETECTED) 只要这个为真,表示检测到有按键被触摸。 

20140704093912908.jpg

 

 

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

用户377235 2015-6-24 21:07

TIMACQ_CNTR_ADD 应该是 (0x530A)

用户377235 2015-1-22 15:31

什么板子,有sch文件吗?

用户863528 2014-8-14 16:35

楼主牛,前段时间我也用这个芯片做了个触摸开关,结果用库怎么也调不出来,今天终于知道原因了,谢谢先。

southcreek 2014-7-4 09:35

这个直接到ST的网站上下载就行了。

用户377235 2014-7-2 18:18

楼主,能共享一下STM8S_TouchSensing_Lib_V2.5.0吗?谢谢了。

用户89281 2006-11-4 04:01

谢了
相关推荐阅读
southcreek 2025-02-20 13:35
供电开关电路不良引起的MCU程序跑飞及解决办法
这是一个3.3V 的供电开关,给WIFI模块供电。目的是能控制WIFI模块通电或断电。VCC_3V3 是电源,当WLENN为低时,Q1打开输出VCCW 给WIFI模块供电。实际使用时,当控制WLENN...
southcreek 2025-01-22 06:34
设置可执行程序图标
在本文的示例中,图标文件名称为“logo.ico”,该文件位于项目主目录下。2.2 设置标题栏图标通过下列函数设置标题栏图标:setWindowIcon(QIcon("://logo.ico"));1...
southcreek 2024-12-04 16:32
PWM输出隔离DAC设计
这个设计的目标是产生一个隔离的DAC输出。12V供电,产生0~5V的输出。达到10000约13.3位的分辨率。要求DAC输出在改变设置后1S内能稳定。需要能长时间保持稳定和低噪声。能达到要求的DAC只...
southcreek 2024-12-04 15:23
一个基于HAL库的串口控制框架
将串口接收配置为 DMA方式,DMA 使用 DMA_CIRCULAR 模式工作。串口接收的数据实际上构成循环队列。 定义一个结构Comm_typedef 结构体中包含指向接收到的第一字节位置chrc...
southcreek 2024-07-08 11:38
接地不良导致的故障分析
这个电路的控制板需要连接显示板和识别板。5V 供电和串行控制连到显示板,显示板再连接到识别板。识别板上电位器使用一个LDO供电,将输入的5V转成3.3V。当电位器滑动时,输出电压在0~3.3V之间。...
我要评论
5
25
关闭 站长推荐上一条 /4 下一条