This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

STM32F429 disc1 usart corrupt data

i have been trying to run USART on discovery board(STM32F429 DISC1). But all get in the transmission is corrupt data pls help me out. This my code for my project.

int main()
{ board_init(); led_blinkALT(5); while(GPIO_ReadInputDataBit(GPIOA , GPIO_Pin_0)==0) led_blinkRed(2); usart_Tx_str("Hello!"); led_blinkGreen(2); while(GPIO_ReadInputDataBit(GPIOA , GPIO_Pin_0)==0) led_blinkRed(2); led_blinkGreen(2); while(1) TIMER_Capture(); usart_Rx();
}

void TIMER_Capture(void)
{ if (cn==0) { ICvalue1=TIM_GetCapture1(TIM2); cn=1; } else if (cn ==1) { ICvalue2=TIM_GetCapture1(TIM2); if(ICvalue2 > ICvalue1) { capture = (ICvalue2 - ICvalue1); } else if (ICvalue2 < ICvalue1) { capture = ((0xFFFF - ICvalue1) + ICvalue2); } else { capture = 0; } freq = (uint32_t) SystemCoreClock / capture; cn = 0; usart_Tx(freq); } return;
}

int usart_Tx(int ch)
{ while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, ch); //led_blinkGreen(1); return(ch);
} void usart_Tx_str(char *str)
{ int i = 0; while(str[i] != 0) { usart_Tx(str[i++]); }
} int usart_Rx()
{ while ((USART1->SR & USART_SR_RXNE) == 0) { led_blinkRed(1); } led_blinkGreen(1); return (USART1->DR & 0x1FF);
} void board_init(void)
{ GPIO_init(); USART_init(); TIMER_init();
} void GPIO_init(void)
{ GPIO_InitTypeDef GPIO_InitDef;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); GPIO_InitDef.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; GPIO_InitDef.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitDef.GPIO_OType = GPIO_OType_PP; GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOG, &GPIO_InitDef);

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitDef.GPIO_Pin = GPIO_Pin_0; GPIO_InitDef.GPIO_Mode = GPIO_Mode_IN; GPIO_InitDef.GPIO_OType = GPIO_OType_PP; GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitDef);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource15, GPIO_AF_TIM2); GPIO_InitDef.GPIO_Pin = GPIO_Pin_15; GPIO_InitDef.GPIO_Mode = GPIO_Mode_AF; GPIO_InitDef.GPIO_OType = GPIO_OType_PP; GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitDef);

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4); GPIO_InitDef.GPIO_Pin = GPIO_Pin_12; GPIO_InitDef.GPIO_OType = GPIO_OType_PP; GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitDef.GPIO_Mode = GPIO_Mode_AF; GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitDef);

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1); GPIO_InitDef.GPIO_Pin = GPIO_Pin_6| GPIO_Pin_7; GPIO_InitDef.GPIO_Mode = GPIO_Mode_AF; GPIO_InitDef.GPIO_OType = GPIO_OType_PP; GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitDef);

/* GPIO_PinAFConfig(GPIOB, GPIO_PinSource2, GPIO_AF_TIM2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_TIM2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_TIM2); GPIO_InitDef.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_10 | GPIO_Pin_11; GPIO_InitDef.GPIO_OType = GPIO_OType_PP; GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitDef.GPIO_Mode = GPIO_Mode_AF; GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitDef);*/

}
void USART_init(void)
{ USART_InitTypeDef USART_InitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); USART_InitStruct.USART_BaudRate = 9600; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART1, &USART_InitStruct); USART_Cmd(USART1, ENABLE);

}

void TIMER_init(void)
{ TIM_TimeBaseInitTypeDef TIM_BaseStruct; TIM_ICInitTypeDef TIM_ICDef; TIM_OCInitTypeDef TIM_OCStruct;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); TIM_BaseStruct.TIM_Prescaler = 0; TIM_BaseStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_BaseStruct.TIM_Period = 83999; /* 1kHz PWM */ TIM_BaseStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_BaseStruct.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM4, &TIM_BaseStruct); TIM_Cmd(TIM4, ENABLE);

TIM_OCStruct.TIM_OCMode = TIM_OCMode_Toggle; TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable; TIM_OCStruct.TIM_Pulse = 41999; //50% duty cycle TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM4, &TIM_OCStruct); TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_BaseStruct.TIM_Prescaler = 84-1; TIM_BaseStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_BaseStruct.TIM_Period = 0xFFFF; TIM_BaseStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_BaseStruct.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2, &TIM_BaseStruct);

TIM_ICDef.TIM_Channel = TIM_Channel_1; TIM_ICDef.TIM_ICFilter = 0; TIM_ICDef.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM_ICDef.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICDef.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInit(TIM2, &TIM_ICDef); TIM_Cmd(TIM2, ENABLE);

}

void led_blinkALT(int x)
{ int i; for(i=0;i<x;i++) { led_greenON(); delay(5000000); led_redON(); led_greenOFF(); delay(5000000); led_redOFF(); }
} void led_blinkGreen(int x)
{ int i; for(i=0;i<x;i++) { led_greenON(); delay(5000000); led_greenOFF(); delay(5000000); }
}

void led_blinkRed(int x)
{ int i; for(i=0;i<x;i++) { led_redON(); delay(5000000); led_redOFF(); delay(5000000); }
} void led_redON(void)
{ GPIO_SetBits(GPIOG, led_red);
} void led_redOFF(void)
{ GPIO_ResetBits(GPIOG, led_red);
} void led_greenON(void)
{ GPIO_SetBits(GPIOG, led_green);
} void led_greenOFF(void)
{ GPIO_ResetBits(GPIOG, led_green);
} void delay(int a)
{ int i,j; for(i=0;i<a;i++) { j++; }
}

Parents
  • Wall of unformatted code.

    But no text describing exactly what you have done to try to figure out what is wrong.

    If you get corrupted data, then you do get data. So have you spent time verifying that the data is transmitted using the baudrate you expect it to be transmitted with? And using the expected number of data bits, stop bits etc? Using the correct logic levels for the signals?

    You don't even tell us your definition of corrupted data. If you are sending from a PC and receiving corrupt data on your board. Or sending from the board and receiving corrupt data on the PC. Or maybe doing a loopback test. If you are connecting logic-level signals between two devices or if you have some RS-232 transceivers.

    Try to use a strategy when figuring out what is wrong. And try to not put "ask a forum" as the first step of that strategy.

Reply
  • Wall of unformatted code.

    But no text describing exactly what you have done to try to figure out what is wrong.

    If you get corrupted data, then you do get data. So have you spent time verifying that the data is transmitted using the baudrate you expect it to be transmitted with? And using the expected number of data bits, stop bits etc? Using the correct logic levels for the signals?

    You don't even tell us your definition of corrupted data. If you are sending from a PC and receiving corrupt data on your board. Or sending from the board and receiving corrupt data on the PC. Or maybe doing a loopback test. If you are connecting logic-level signals between two devices or if you have some RS-232 transceivers.

    Try to use a strategy when figuring out what is wrong. And try to not put "ask a forum" as the first step of that strategy.

Children