tom dunigan
/
L476_touch
attempt at TSC on STM32L4. not working
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 // capacitive touch TSC 00002 // select cap pin and sensor pin in same group datasheet table 17 00003 // http://www.codeforge.com/read/253659/bsp.c__html 00004 00005 #include "mbed.h" 00006 #include "PeripheralPins.h" 00007 TSC_HandleTypeDef TscHandle; 00008 const PinMap PinMap_TSC[] = { 00009 {PB_6, (int)TSC, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, 9)}, // AF9 OUTPUT or AF? 00010 {PB_7, (int)TSC, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, 9)}, // need capacitor 00011 {NC, NC, 0} 00012 }; 00013 00014 #define PRREG(z) printf(#z" 0x%x\n",z) 00015 Timer tmr; 00016 00017 main() { 00018 tmr.start(); 00019 __HAL_RCC_TSC_CLK_ENABLE(); // enable TSC 00020 // enable GPIO and config pins 00021 __HAL_RCC_GPIOB_CLK_ENABLE(); 00022 //HAL_GPIO_Init(); // mux function 9 00023 pin_function(PB_6,pinmap_find_function(PB_6,PinMap_TSC)); 00024 pin_function(PB_7,pinmap_find_function(PB_7,PinMap_TSC)); 00025 00026 TscHandle.Instance = TSC; 00027 TscHandle.Init.AcquisitionMode = TSC_ACQ_MODE_NORMAL; 00028 TscHandle.Init.CTPulseHighLength = TSC_CTPH_2CYCLES; 00029 TscHandle.Init.CTPulseLowLength = TSC_CTPL_2CYCLES; 00030 TscHandle.Init.IODefaultMode = TSC_IODEF_IN_FLOAT; 00031 TscHandle.Init.MaxCountInterrupt = DISABLE; 00032 TscHandle.Init.MaxCountValue = TSC_MCV_8191; 00033 TscHandle.Init.PulseGeneratorPrescaler = TSC_PG_PRESC_DIV32; 00034 TscHandle.Init.SpreadSpectrum = DISABLE; 00035 TscHandle.Init.SpreadSpectrumDeviation = 127; 00036 TscHandle.Init.SpreadSpectrumPrescaler = TSC_SS_PRESC_DIV1; 00037 TscHandle.Init.SynchroPinPolarity = TSC_SYNC_POL_FALL; 00038 /* All channel, shield and sampling IOs must be declared below */ 00039 TscHandle.Init.ChannelIOs = TSC_GROUP2_IO3; // PB6 output push-pull sensor 00040 TscHandle.Init.SamplingIOs = TSC_GROUP2_IO4; // PB7 output open drain need capacitor 00041 TscHandle.Init.ShieldIOs = 0; 00042 HAL_TSC_Init(&TscHandle); 00043 PRREG(GPIOB->MODER); 00044 PRREG(GPIOB->OTYPER); 00045 PRREG(GPIOB->PUPDR); 00046 PRREG(GPIOB->AFR[0]); 00047 PRREG(GPIOB->AFR[1]); 00048 PRREG(TSC->CR); 00049 PRREG(TSC->IOASCR); 00050 PRREG(TSC->IOSCR); 00051 PRREG(TSC->IOCCR); 00052 00053 while(1) { 00054 uint32_t us = tmr.read_us(); 00055 HAL_TSC_Start(&TscHandle); 00056 HAL_TSC_PollForAcquisition(&TscHandle); 00057 uint32_t val = HAL_TSC_GroupGetValue(&TscHandle,1); // group 2 0 to 7 or 1 to 8 00058 us=tmr.read_us() - us; 00059 int avrg=0; 00060 for(int i=0;i<100;i++) { 00061 HAL_TSC_Start(&TscHandle); 00062 HAL_TSC_PollForAcquisition(&TscHandle); 00063 avrg += HAL_TSC_GroupGetValue(&TscHandle,1); 00064 } 00065 printf("%d %d us avrg %d\n",val,us,avrg/100); 00066 PRREG(TSC->IOGCSR); 00067 wait(2.0); 00068 } 00069 00070 }
Generated on Mon Jul 18 2022 18:24:12 by 1.7.2