#include "stm32f4xx.h"
#include "stm32f4xx_hal_def.h"
#include "stm32f4xx_hal_rcc.h"
#include "stm32f4xx_hal_gpio.h"
int main(void) {
uint32_t S1S2, S11S12,S21S22,S31S32,S41S42,S51S52,S61S62;
uint32_t comp1,notComp1, comp2,notComp2,comp3,notComp3,inj,notInj,ssgn,notSsgn;
//Define the structure
GPIO_InitTypeDef GPIO_InitStruct;
//Start the clock on port D
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
//Configure the GPIOD OUTPUT pin registers
// port D OUTPUT PIN
GPIO_InitStruct.Pin =
GPIO_PIN_15 //s1 s2
| GPIO_PIN_14 //s61 s62
|GPIO_PIN_13 //s51 s52
|GPIO_PIN_12 //s41 s42
|GPIO_PIN_11 //s31 s32
|GPIO_PIN_10 //s21 s22
|GPIO_PIN_9; //s11 s12
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
//Configure the GPIOD INPUT pin registers
// Port A INPUT PINs
GPIO_InitStruct.Pin =
GPIO_PIN_15 //COMP 1
|GPIO_PIN_14 //COMP 2
|GPIO_PIN_13; //COMP 3
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
//Configure the GPIOD INPUT pin registers
// port B INPUT PIN
GPIO_InitStruct.Pin =
GPIO_PIN_15 //Ssgn
|GPIO_PIN_14 //Sinj
|GPIO_PIN_13; //Sinj-
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
while (1)
{
notInj = ~GPIOB->IDR&GPIO_PIN_14;
notInj = notInj << 1;
comp1 = GPIOA->IDR&GPIO_PIN_15;
notComp1 = ~GPIOA->IDR&GPIO_PIN_15;
ssgn = GPIOB->IDR&GPIO_PIN_15;
notSsgn = ~GPIOB->IDR&GPIO_PIN_15;
comp3 = GPIOA->IDR&GPIO_PIN_13;
comp3 = comp3 << 2;
notComp3 = ~GPIOA->IDR&GPIO_PIN_13;
notComp3 = notComp3 << 2;
inj = GPIOB->IDR&GPIO_PIN_14;
inj = inj << 1;
comp2 = GPIOA->IDR&GPIO_PIN_14;
comp2 = comp2 << 1;
notComp2 = ~GPIOA->IDR&GPIO_PIN_14;
notComp2 = notComp2 << 1;
///////////////S1S2//////////////////////////////////////////////////////////////////////
S1S2 = notInj;
GPIOD->ODR = S1S2; //output is now on pin 15
/////////////////////S11S12////////////////////////////////////////////////////////
S11S12 = ((comp1¬Comp3)&(ssgn&inj)) | ((notComp1&comp3)&(notSsgn&inj));
S11S12 = S11S12 >> 6;
GPIOD->ODR = S11S12; //output on pin 9
}
}
Cuando muestro este código a la placa y conecto el osciloscopio al Pin 9, recibo una señal PWM cuando debería obtener una línea recta para el voltaje de CC si sin embargo comento // GPIOD- > ODR = S1S2 i get Una línea recta en el osciloscopio como debería.
ingresa PA15 ALTO, PB15 ALTO y PA13 ALTO todo lo demás bajo.
Si alguien entiende lo que estoy haciendo mal, agradezco una respuesta gracias de antemano.
debería estar obteniendo una línea recta no esto. enlace