tom dunigan
/
L476_touch
attempt at TSC on STM32L4. not working
main.cpp
- Committer:
- manitou
- Date:
- 2016-06-01
- Revision:
- 0:6cc44b2a3d49
File content as of revision 0:6cc44b2a3d49:
// capacitive touch TSC // select cap pin and sensor pin in same group datasheet table 17 // http://www.codeforge.com/read/253659/bsp.c__html #include "mbed.h" #include "PeripheralPins.h" TSC_HandleTypeDef TscHandle; const PinMap PinMap_TSC[] = { {PB_6, (int)TSC, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, 9)}, // AF9 OUTPUT or AF? {PB_7, (int)TSC, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, 9)}, // need capacitor {NC, NC, 0} }; #define PRREG(z) printf(#z" 0x%x\n",z) Timer tmr; main() { tmr.start(); __HAL_RCC_TSC_CLK_ENABLE(); // enable TSC // enable GPIO and config pins __HAL_RCC_GPIOB_CLK_ENABLE(); //HAL_GPIO_Init(); // mux function 9 pin_function(PB_6,pinmap_find_function(PB_6,PinMap_TSC)); pin_function(PB_7,pinmap_find_function(PB_7,PinMap_TSC)); TscHandle.Instance = TSC; TscHandle.Init.AcquisitionMode = TSC_ACQ_MODE_NORMAL; TscHandle.Init.CTPulseHighLength = TSC_CTPH_2CYCLES; TscHandle.Init.CTPulseLowLength = TSC_CTPL_2CYCLES; TscHandle.Init.IODefaultMode = TSC_IODEF_IN_FLOAT; TscHandle.Init.MaxCountInterrupt = DISABLE; TscHandle.Init.MaxCountValue = TSC_MCV_8191; TscHandle.Init.PulseGeneratorPrescaler = TSC_PG_PRESC_DIV32; TscHandle.Init.SpreadSpectrum = DISABLE; TscHandle.Init.SpreadSpectrumDeviation = 127; TscHandle.Init.SpreadSpectrumPrescaler = TSC_SS_PRESC_DIV1; TscHandle.Init.SynchroPinPolarity = TSC_SYNC_POL_FALL; /* All channel, shield and sampling IOs must be declared below */ TscHandle.Init.ChannelIOs = TSC_GROUP2_IO3; // PB6 output push-pull sensor TscHandle.Init.SamplingIOs = TSC_GROUP2_IO4; // PB7 output open drain need capacitor TscHandle.Init.ShieldIOs = 0; HAL_TSC_Init(&TscHandle); PRREG(GPIOB->MODER); PRREG(GPIOB->OTYPER); PRREG(GPIOB->PUPDR); PRREG(GPIOB->AFR[0]); PRREG(GPIOB->AFR[1]); PRREG(TSC->CR); PRREG(TSC->IOASCR); PRREG(TSC->IOSCR); PRREG(TSC->IOCCR); while(1) { uint32_t us = tmr.read_us(); HAL_TSC_Start(&TscHandle); HAL_TSC_PollForAcquisition(&TscHandle); uint32_t val = HAL_TSC_GroupGetValue(&TscHandle,1); // group 2 0 to 7 or 1 to 8 us=tmr.read_us() - us; int avrg=0; for(int i=0;i<100;i++) { HAL_TSC_Start(&TscHandle); HAL_TSC_PollForAcquisition(&TscHandle); avrg += HAL_TSC_GroupGetValue(&TscHandle,1); } printf("%d %d us avrg %d\n",val,us,avrg/100); PRREG(TSC->IOGCSR); wait(2.0); } }