原创 STM8 触摸调试笔记

2014-7-4 09:39 4808 22 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

 

 

文章评论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 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之间。...
southcreek 2024-06-26 09:15
【EMC整改】带辅助加热的滴速控制器辐射抗扰整改
这个滴速式的输液泵使用一个红外线发射和接收装置,当有液滴通过时,会扰动检测信号,识别这个扰动检测到液滴滴下,获得滴壶中的液滴速度,调整阀门大小,实现输液速度控制。控制器还配备一根加热条,用于输液时对药...
southcreek 2024-06-06 08:52
QT 使用QSettings 操作ini文件配合表格操作
这个项目可以演示 使用QSetting 读取或写入 ini文件。并使用tablewidget 显示。Ini文件的格式如下,这个文件可以事先编写。也可以在程序中生成。有一个大类,下面有一个小类使用等号设...
southcreek 2024-05-27 16:18
差分输入ADC的单端到差分转换器驱动设计
单端信号需要转换成差分信号,以便使用ADC进行转换。这个就所谓的ADC驱动电路。需要的结果为Vp = Vcm + Vi/2Vn = Vcm – Vi/2这样 Vp – Vn = Vi使用简单的加法器和...
我要评论
5
22
关闭 站长推荐上一条 /2 下一条