attempt at TSC on STM32L4. not working

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }