使用了最便宜的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) 只要这个为真,表示检测到有按键被触摸。
用户377235 2015-6-24 21:07
用户377235 2015-1-22 15:31
用户863528 2014-8-14 16:35
southcreek 2014-7-4 09:35
用户377235 2014-7-2 18:18
楼主,能共享一下STM8S_TouchSensing_Lib_V2.5.0吗?谢谢了。
用户89281 2006-11-4 04:01