Hallo, habe eine Verständnis Frage: was genau bedeutet Reset Bit und Set Bit? Bit Setzen: GPIO_BSRR_BS_6; und Bit Restet: GPIO_BSRR_BR_6; die frage bezieht sich auf die 6 und das Register. Grüsse
Möchtest du einfach nur ein GPIO setzten oder wie muss man die Frage verstehen? Set Bit: Du setzte den Ausgang auf High Reset Bit: Du setzte den GPIO auf Low In deinem Fall GPIO6 eines PORTS
Was verstehst Du da dran jetzt nicht? Was ein gesetztes Bit ist oder was das 6. Bit ist?
Hallo, ich verwende das für die Erzeugung eines PWM Signals. Das soll über einen DMA erzeugt werden. Dazu setze ich die Bit oder resete das Bit. Aber ich glaube ich habe es Verstanden. Grüsse
Hallo, Ja dieses PWM- Signal soll einfacher zu konfiguieren sein, also zum Beispiel Zahnräder abbilden. Daher ist das über einen DMA Ausgang einfacher. Ich dachte ich kann mit dem GPIO das Zahnrad wiedergeben. Grüsse
So ich habe jetzt ein Programm geschrieben, wie ich mir das Vorstelle. Aber ich finde den Fehler nicht weil ich noch kein PWM Signal aus GPIO PIN E6 bekomme. Jemand eine Idee. Hier das Programm: #define Speed_MAX 280 #define Speed_MIN 20 #define Raddurchmesser 300 //mm #define Buffersize 360 #define PI 3.14 uint32_t RDS_buffer[Buffersize]; uint16_t speed; void RDS_Init_GPIO (void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOE , &GPIO_InitStructure); GPIO_ResetBits(GPIOE,GPIO_Pin_11); } void RDS_Init_TIM_DMA(void) { DMA_InitTypeDef DMA_InitStructure; /*DMA for RDS Gemoetry*/ DMA_DeInit(DMA_RDS); while(DMA_GetCmdStatus(DMA_RDS)); DMA_InitStructure.DMA_Channel = DMA_Channel_7; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &GPIOE->BSRRL; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t) RDS_buffer; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_InitStructure.DMA_BufferSize = Buffersize; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA_RDS, &DMA_InitStructure); /* Enable DMA1 Stream1 */ DMA_Cmd(DMA_RDS, ENABLE); TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); TIM_Cmd(TIM8, DISABLE); TIM_TimeBaseStructInit(&TIM_TimeBaseInitStructure); TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period = 0; setting TIM_TimeBaseInitStructure.TIM_Prescaler = 5; //TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; TIM_ARRPreloadConfig(TIM8, DISABLE); //TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE); TIM_TimeBaseInit(TIM8, &TIM_TimeBaseInitStructure); TIM_DMACmd(TIM8, TIM_DMA_CC3, ENABLE); } void RDS_Encoder_Wheel() // Vorgabe der Zähnezahl durch den Modul { int i; for(i=0; i<360; i++) { if(i%6 < 3) RDS_buffer[i] = GPIO_BSRR_BS_6; else RDS_buffer[i] = GPIO_BSRR_BR_6; } } void Speed_Init(uint16_t speed) { uint16_t speed_tics; TIM_Cmd(TIM8, ENABLE); speed_tics = 28000000/6/speed; if (TIM8->CNT >= speed_tics) { TIM8->CNT = speed_tics -1; } TIM8->ARR = speed_tics; }
Nutze bitte die Formatierung
1 | C-Code |
für dein Code! Habe jetzt nicht den ganzen Code angeschaut. Bei Timer 1,8,...(siehe Datenblätter) muss TIM_CtrlPWMOutputs(...); eingefügt werden.
Hallo, Hm ich nutze DMA und nicht die Klassischen PWM Varianten mit TIM_OC_Mode. Im Refernzhandbuch steht das man das in Verbindung mit TIM_OC_Mode macht. Den benutze ich nicht. Ich denke mit den GPIO sitmmt was nicht. Grüsse
>RDS_buffer[i] = GPIO_BSRR_BR_6;
meinst du nicht: GPIO_BSRR_BR_6 = RDS_buffer[i]; ???
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.