2013-11-05 12:51 AM
Hi all.
I'm new to ST micro's so excuse me if this is a dumb question. I'm working on a project using the above micro. I'm using Atollic as my ide. I'm trying to get timer 4 working. The code compiles , but in the debugger the list of SFR's does not show timer 4. It shows timer 2 and 3 , but not 4. As I understand , the low density devices (STM32F102C4 and C6) don't contain timer 4 , but I'm using the STM32F102CB , which is supposed to have timer 4 included. Am I missing something here? Cheers Robin2013-11-05 04:57 AM
ST's numbering, suffixes and classes are rather confusing. Beyond the ones I'm specifically using I couldn't tell you what's in a specific one.
You could check the RCC->APBxENR register and check if the TIMx bit is functional to see if it exists, or not. If the peripheral enable is stuck at zero, then it's not present. A flaw in Atollic's database is something you'll need to discuss with them.2013-11-05 10:37 PM
Hi.
I've managed to get timer4 working(sort of). It's difficult to debug when the SFR is not available in the debugger!!! I've sent a email to Atollic to see if I can get it resolved. The problem I'm having is the input capture works for capturing rising edge , falling edge , but both edges does not work. Setting to capture both edges also only captures falling edges :0( Is there something different that has to be done to capture both edges as opposed to only one edge? Any help appreciated. cheers Rob This is a copy of the relevant code: RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM4EN, ENABLE); /* Enable the TIM4 global Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* TIM4 configuration: Input Capture mode --------------------- The external signal is connected to TIM4 CH4 pin (PB.9) ------------------------------------------------------------ */ TIM_ICInitStructure.TIM_Channel = TIM_Channel_4; TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICFilter = 0x0; TIM_ICInit(TIM4, &TIM_ICInitStructure); /* TIM enable counter */ TIM_Cmd(TIM4, ENABLE); /* Enable the CC4 Interrupt Request */ TIM_ITConfig(TIM4, TIM_IT_CC4, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);2013-11-06 11:15 AM
Should be possible to trigger on both edges, it's perceived usability might depend on how close the edges are. The usual method would be a pairing of CH3/CH4 internally so each catch/latch a different edge of the input signal. Or perhaps a PWM input mode?