#include "wm_touch.h" // 在使用TOUCH功能时,TOUCH0(PA7)必须复用为TOUCH功能,不可以作为其他功能!!! HAL_StatusTypeDef HAL_TOUCH_Init(TOUCH_HandleTypeDef *htouch) { int i; if (htouch == NULL) { return HAL_ERROR; } assert_param(IS_TOUCH_INSTANCE(htouch->Instance)); assert_param(IS_TOUCH_CHANNELS(htouch->Init.Channel)); assert_param(IS_TOUCH_WINDOW(htouch->Init.Window)); assert_param(IS_TOUCH_SCANPERIOD(htouch->Init.ScanPeriod)); HAL_TOUCH_MspInit(htouch); WRITE_REG(htouch->Instance->CR, 0); WRITE_REG(htouch->Instance->IE_IF, 0x0000FFFF); for (i = 0; i < 16; i++) { if (htouch->Init.Channel & (1 << i)) { assert_param(IS_TOUCH_THRESHOLD(htouch->Init.Threshold[i])); MODIFY_REG(*((&(htouch->Instance->CH0CR)) + i), TOUCH_CH0CR_THRESHOLD, htouch->Init.Threshold[i]); if (htouch->Init.Irq_en & (1 << i)) { SET_BIT(htouch->Instance->IE_IF, (1 << (16 + i))); } } } WRITE_REG(htouch->Instance->CR, ((htouch->Init.Channel << TOUCH_CR_CH_SEL_Pos) | (htouch->Init.ScanPeriod << TOUCH_CR_SCAN_PERIOD_Pos) | (htouch->Init.Window << TOUCH_CR_CAPDET_CNT_Pos) | TOUCH_CR_EN)); return HAL_OK; } HAL_StatusTypeDef HAL_TOUCH_DeInit(TOUCH_HandleTypeDef *htouch) { if (htouch == NULL) { return HAL_ERROR; } CLEAR_BIT(htouch->Instance->CR, TOUCH_CR_EN); HAL_TOUCH_MspDeInit(htouch); return HAL_OK; } __attribute__((weak)) void HAL_TOUCH_MspInit(TOUCH_HandleTypeDef *htouch) { UNUSED(htouch); } __attribute__((weak)) void HAL_TOUCH_MspDeInit(TOUCH_HandleTypeDef *htouch) { UNUSED(htouch); } __attribute__((weak)) void HAL_TOUCH_Callback(TOUCH_HandleTypeDef *htouch, uint16_t Flag) { UNUSED(htouch); } void HAL_TOUCH_IRQHandler(TOUCH_HandleTypeDef *htouch) { uint32_t flag = __HAL_TOUCH_GET_FLAG(htouch); if (flag != RESET) { __HAL_TOUCH_CLEAR_IT(htouch, flag); HAL_TOUCH_Callback(htouch, flag & TOUCH_IE_IF_FLAG); } }