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); } }
Don't you have access to an oscilloscope? It is way easier to verify the baudrate by just looking at the signal from your transmission.