We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi I'm having issue getting the data send from the usart1; I initialised properly, but the problem is not the rightdata is display on my PC terminal; I'm using stm32f407VG
#include "stm32f4xx.h" #include <stdio.h> void init_GPIO(void){ GPIO_InitTypeDef GPIO_InitStruct; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12; // we want to configure all LED GPIO pins GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; // we want the pins to be an output GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; // this sets the GPIO modules clock speed GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; // this sets the pin type to push / pull (as opposed to open drain) GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; // this sets the pullup / pulldown resistors to be inactive GPIO_Init(GPIOD, &GPIO_InitStruct); // this finally passes all the values to the GPIO_Init function which takes care of setting the corresponding bits. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; // we want to configure PA0 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; // we want it to be an input GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//this sets the GPIO modules clock speed GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; // this sets the pin type to push / pull (as opposed to open drain) GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN; // this enables the pulldown resistor --> we want to detect a high level GPIO_Init(GPIOA, &GPIO_InitStruct); // this passes the configuration to the Init function which takes care of the low level stuff } void initUART (uint32_t baud){ GPIO_InitTypeDef GPIO_InitStructureTx; GPIO_InitTypeDef GPIO_InitStructureRx; USART_InitTypeDef USART_InitStructure; // Enable Clocks // //USART_Cmd(USART1, DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); // Enable clocks RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1); GPIO_InitStructureTx.GPIO_Pin = GPIO_Pin_6; // Configure TX pin GPIO_InitStructureTx.GPIO_Mode = GPIO_Mode_AF; // Push-Pull GPIO_InitStructureTx.GPIO_OType = GPIO_OType_PP; // Push-Pull GPIO_InitStructureTx.GPIO_Speed = GPIO_Speed_2MHz;; // 2MHz GPIO_Init(GPIOB, &GPIO_InitStructureTx); // Initialise GPIO_InitStructureRx.GPIO_Pin = GPIO_Pin_7; // Configure RX pin GPIO_InitStructureRx.GPIO_Mode = GPIO_Mode_IN; // Push-Pull GPIO_InitStructureRx.GPIO_Speed = GPIO_Speed_2MHz; // 2MHz GPIO_Init(GPIOB, &GPIO_InitStructureRx); // Initialise USART_InitStructure.USART_BaudRate = baud; // Set USART1 Baud Rate USART_InitStructure.USART_WordLength = USART_WordLength_8b; // Set USART1 Word Length USART_InitStructure.USART_StopBits = USART_StopBits_1; // Configure USART1 Stop Bits USART_InitStructure.USART_Parity = USART_Parity_No; // Configure USART1 Parity Bits USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Configure USART1 Flow Control USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; // Set USART1 Operation Mode USART_Init(USART1, &USART_InitStructure); // Configure UART USART_Cmd(USART1, ENABLE); // Enable UART } void USART_puts(USART_TypeDef* USARTx, volatile char *s){ while(*s){ // wait until data register is empty while( !(USARTx->SR & 0x00000040) ); USART_SendData(USARTx, *s); *s++; } } void Delay(__IO uint32_t nCount) { while(nCount--) { } } int main() { uint32_t brrrr=650; //uint32_t brrrr=0; uint32_t baud=1600; //printf("4"); init_GPIO(); initUART (1600); //USART_Configuration(); USART_puts(USART1, "Garlir"); while(1) { //GPIOD->BSRRL = 0xF000; // set PD12 thru PD15 //GPIOD->ODR=1<<13; // if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)) // { // // } GPIO_SetBits(GPIOD, GPIO_Pin_13); //USART_puts(USART1, "Garlir"); USART_SendData(USART1, 'P'); Delay(38000); GPIO_ResetBits(GPIOD, GPIO_Pin_13); //USART_puts(USART1, "Ga"); USART_SendData(USART1, 'L'); Delay(38000); //USART1->BRR=52.125; //baud=baud+300; //initUART (baud); brrrr=brrrr+1; USART1->BRR=brrrr; Delay(38000); } }
Hi; Finally I got it working, I'm using smt32f407VG; I had to use a max232 chip between then MCU and the PC. And still using the successive baud increment approach, I changed my main function to:
int main() { char valuez[40]={0}; uint32_t baud=1600; init_GPIO(); initUART (baud); while(1) { GPIO_SetBits(GPIOD, GPIO_Pin_13); USART_SendData(USART1, 'P'); Delay(380000); GPIO_ResetBits(GPIOD, GPIO_Pin_13); //USART_puts(USART1, "Ga"); USART_SendData(USART1, 'L'); Delay(380000); sprintf(valuez, "%d\n", baud); USART_puts(USART1,valuez); baud=baud+100; initUART (baud); Delay(38000); } }
And on my terminal, I have:
ààààààøøààààààøøààààààððððððððððÀÀÀÀÀÀÀÀÀÀÀÀÀÀ ðÀðÀàààààààààààüüüüüþþÀÀþÀÀþÀÀþÀ0À0À0À0À0À0À0À0À0À0À8À8À8À8ààààààààààààààààààààààààààààææxææææ8öööö8öööö<òòòò<òò<òò<òò¼òò¼òò¼òò¼òò¼óó¼òòóóóó ÃßÃßÃàÃàÃãÃãÃÜÀÃÜÀÃÜÃÃÜÃÃÜÄÃÜÄÃÜÇÃÜÇÃÜØÃÜØÃÜÛÃÜÛÃÜÜÃÜÜÃÜßÃÜßÃÜðÃÜð@ÿ8ÿ8ÿÃ8ÿÃ@ÿ8ÿ@ÿ8ÿ@ÿ8ÿ@ÿ8ÿ@ÿ8ÿ@ÿ8ÿ@ÿ8ÿ@ÿ8ÿ'ÿ8ÿ'ÿ8ÿ@ÿ8ÿ@ÿ8ÿ'ÿÿ'ÿÿ'ÿÿ'ÿÿ'ÿÿ'ÿÿ'ÿÿ'ÿÿ'ÿÿ'ÿÿ'ÿÿ'ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿPPL18L188200áPL18300 PL18400áPL18500 PL18600áPL18700 PL18800áPL18900 PL19000áPL19100 PL19200 PL19300 PL19400 PL19500áPL19600 PL19700 PL19800 PL19900 PL20000áPL20100áP̲°200áP¬2³0°Ð²°°°¬¬ ¬ ¤ ¤ ¤ ¬¨¤¨¤¨¤¨¤¨¤¨¤¨¤
it's clear that at a baud of 19200, I get the exact data. Thanks good day!