2018-11-19 01:40 PM
2018-11-19 02:24 PM
I'm not entirely sure what you're doing or if this is a custom board, or whatever.
If behaviour stand-alone vs debugger is different, make sure BOOT0 pin is pulled low. Output diagnostic/telemetry data out a USART, and avoid routines dependent on ITM or debug support.
Also make sure to enable all clocks and GPIOs you need, don't rely on side effects of the debugger connecting and initializing functionality it uses.
2018-11-19 02:33 PM
Thank you very much sir, everything you say is activated, clock signals are activated, and in case of boot0 pin 0, I see the data going to the TIM-> CCR registers, but there is no response when I load the card.
2018-11-19 02:51 PM
>>but there is no response when I load the card
Sorry I don't know what this means or what card you're talking about.
2018-11-19 02:52 PM
I'm talking about the stm32f407vg card, sir
2018-11-19 02:54 PM
Sir, the card is running but there is no reaction at the pin outputs, there is no error in compiling the program and the debug is running when I load it on the card, there is no response.
Sir, the card is running but there is no reaction at the pin outputs, there is no error in compiling the program and the debug is running when I load it on the card, there is no response.
2018-11-19 02:57 PM
this is code sir;
#include "stm32f4xx.h" // Device header
#include "stm32f4xx_gpio.h" // Keil::Device:StdPeriph Drivers:GPIO
#include "stm32f4xx_rcc.h" // Keil::Device:StdPeriph Drivers:RCC
#include "stm32f4xx_tim.h" // Keil::Device:StdPeriph Drivers:TIM
#include "RTE_Device.h" // Keil::Device:Startup
#include "RTE_Components.h" // Component selection
#include "misc.h "
#include "stm32f4xx_adc.h" // Keil::Device:StdPeriph Drivers:ADC
uint16_t adc_okuma(void){
ADC_RegularChannelConfig(ADC2,ADC_Channel_9,1,ADC_SampleTime_56Cycles);
ADC_SoftwareStartConv(ADC2);
while(ADC_GetFlagStatus(ADC2,ADC_FLAG_EOC)== RESET);
return ADC_GetConversionValue(ADC2);
}
void delay(uint32_t time){
while(time)
time--;
}
int main(){
GPIO_InitTypeDef APORT;
GPIO_InitTypeDef CPORT;
GPIO_InitTypeDef ADCIO;
ADC_InitTypeDef ADC_CONFIG;
ADC_CommonInitTypeDef ADCORTAK;
TIM_OCInitTypeDef PWM;
TIM_TimeBaseInitTypeDef TIMER;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);
CPORT.GPIO_Mode = GPIO_Mode_AF;
CPORT.GPIO_OType = GPIO_OType_PP;
CPORT.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
CPORT.GPIO_PuPd = GPIO_PuPd_NOPULL;
CPORT.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOC,&CPORT);
APORT.GPIO_Mode = GPIO_Mode_AF;
APORT.GPIO_OType = GPIO_OType_PP;
APORT.GPIO_Pin = GPIO_Pin_8| GPIO_Pin_9;
APORT.GPIO_PuPd = GPIO_PuPd_NOPULL;
APORT.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOA,&APORT);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_TIM1);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM8);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM8);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_TIM8);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_TIM8);
ADCIO.GPIO_Mode = GPIO_Mode_AN;
ADCIO.GPIO_OType = GPIO_OType_PP;
ADCIO.GPIO_Pin = GPIO_Pin_1;
ADCIO.GPIO_PuPd = GPIO_PuPd_NOPULL;
ADCIO.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOB,&ADCIO);
ADCORTAK.ADC_Mode = ADC_Mode_Independent;
ADCORTAK.ADC_Prescaler = ADC_Prescaler_Div4;
ADC_CommonInit(&ADCORTAK);
ADC_CONFIG.ADC_Resolution = ADC_Resolution_8b;
ADC_Init(ADC2, &ADC_CONFIG);
ADC_Cmd(ADC2,ENABLE);
uint8_t OKUNAN_DEGER;
uint8_t ADC_DATA;
OKUNAN_DEGER = adc_okuma();
ADC_DATA = OKUNAN_DEGER * 500;
TIMER.TIM_Prescaler = 4199;
TIMER.TIM_Period = 1023;
TIMER.TIM_CounterMode = TIM_CounterMode_Up;
TIMER.TIM_ClockDivision = 0;
TIM_TimeBaseInit(TIM1,&TIMER);
TIM_Cmd(TIM1,ENABLE);
TIMER.TIM_Prescaler = 4199;
TIMER.TIM_Period = 1023;
TIMER.TIM_CounterMode = TIM_CounterMode_Up;
TIMER.TIM_ClockDivision = 0;
TIM_TimeBaseInit(TIM8,&TIMER);
TIM_Cmd(TIM8,ENABLE);
PWM.TIM_OCMode = TIM_OCMode_PWM1;
PWM.TIM_OCPolarity = TIM_OCPolarity_High;
PWM.TIM_OutputState = TIM_OutputState_Enable;
PWM.TIM_Pulse = 0;
TIM_OC1Init(TIM1, &PWM);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
PWM.TIM_OCMode = TIM_OCMode_PWM1;
PWM.TIM_OCPolarity = TIM_OCPolarity_High;
PWM.TIM_OutputState = TIM_OutputState_Enable;
PWM.TIM_Pulse = 0;
TIM_OC2Init(TIM1, &PWM);
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM1,ENABLE);
PWM.TIM_OCMode = TIM_OCMode_PWM1;
PWM.TIM_OCMode = TIM_OCMode_PWM1;
PWM.TIM_OCPolarity = TIM_OCPolarity_High;
PWM.TIM_OutputState = TIM_OutputState_Enable;
PWM.TIM_Pulse = 0;
TIM_OC1Init(TIM8, &PWM);
TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);
PWM.TIM_OCMode = TIM_OCMode_PWM2;
PWM.TIM_OCPolarity = TIM_OCPolarity_High;
PWM.TIM_OutputState = TIM_OutputState_Enable;
PWM.TIM_Pulse = 0;
TIM_OC2Init(TIM8, &PWM);
TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);
PWM.TIM_OCMode = TIM_OCMode_PWM1;
PWM.TIM_OCPolarity = TIM_OCPolarity_High;
PWM.TIM_OutputState = TIM_OutputState_Enable;
PWM.TIM_Pulse = 0;
TIM_OC3Init(TIM8, &PWM);
TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Enable);
PWM.TIM_OCMode = TIM_OCMode_PWM1;
PWM.TIM_OCPolarity = TIM_OCPolarity_High;
PWM.TIM_OutputState = TIM_OutputState_Enable;
PWM.TIM_Pulse = 0;
TIM_OC4Init(TIM8, &PWM);
TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM8,ENABLE);
while(1){
TIM1->CCR1 = ADC_DATA;
TIM1->CCR2 = 0;
TIM8->CCR1 = 0;
TIM8->CCR2 = ADC_DATA;
TIM8->CCR3 = 0;
TIM8->CCR4 = 0;
delay(2000);
TIM1->CCR1 = 0;
TIM1->CCR2 = 0;
TIM8->CCR1 = 0;
TIM8->CCR2 = ADC_DATA;
TIM8->CCR3 = ADC_DATA;
TIM8->CCR4 = 0;
delay(2000);
TIM1->CCR1 = 0;
TIM1->CCR2 = ADC_DATA;
TIM8->CCR1 = 0;
TIM8->CCR2 = 0;
TIM8->CCR3 = ADC_DATA;
TIM8->CCR4 = 0;
delay(2000);
TIM1->CCR1 = 0;
TIM1->CCR2 = ADC_DATA;
TIM8->CCR1 = ADC_DATA;
TIM8->CCR2 = 0;
TIM8->CCR3 = 0;
TIM8->CCR4 = 0;
delay(2000);
TIM1->CCR1 = 0;
TIM1->CCR2 = 0;
TIM8->CCR1 = ADC_DATA;
TIM8->CCR2 = 0;
TIM8->CCR3 = 0;
TIM8->CCR4 = ADC_DATA;
delay(2000);
TIM1->CCR1 = ADC_DATA;
TIM1->CCR2 = 0;
TIM8->CCR1 = 0;
TIM8->CCR2 = 0;
TIM8->CCR3 = 0;
TIM8->CCR4 = ADC_DATA;
}
}
2018-11-19 03:59 PM
>>stm32f407vg
That's a chip, do you have the STM32F4-Discovery board?
Both TIM1 and TIM8 are Advanced Timers, they have more fields which you are not initializing properly, clear the variables so at least there isn't random data in the structures.
Also you need to enable outputs for them
/* Main Output Enable */
TIM_CtrlPWMOutputs(TIM1, ENABLE);
TIM_CtrlPWMOutputs(TIM8, ENABLE);
2018-11-19 09:31 PM
I tried but not.
2018-11-20 04:43 AM
sir, it is a need to talk to you thanks to the many you have solved ..