Guten Tag,
Ich bin seit Tagen am versuchen über den USART1 des STM32F107 ein "HELLO
WORLD" zu senden doch im Terminal kommt immer nur das erste Zeichen an,
ein "H" sonst nichts. Weiß irgendwer woran das liegen könnte? Mir würde
wirklich ein Stein vom Herzen fallen wenn ich erfahren würde woran es
liegt, habe schon alles mögliche probiert... Hier mal mein Quelltext:
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_flash.h"
#include "stm32f10x_usart.h"
#include "misc.h"
ErrorStatus HSEStartUpStatus;
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void USART_Configuration(void);
void USART_Send(USART_TypeDef*,volatile char*);
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
USART_Configuration();
USART_Send(USART1,"HELLO WORLD");
while(1)
{
}
return 0;
}
void RCC_Configuration(void)
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PREDIV2Config(RCC_PREDIV2_Div5);
RCC_PLL2Config(RCC_PLL2Mul_8);
RCC_PLL2Cmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET){}
RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2,RCC_PREDIV1_Div5);
RCC_PLLConfig(RCC_PLLSource_PREDIV1,RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08){}
}
SysTick_Config(SystemCoreClock/1000);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
}
void GPIO_Configuration()
{
/* TX - PA9 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
/* RX - PA10 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void USART_Configuration(void)
{
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl =
USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);
}
void USART_Send(USART_TypeDef* USARTx,volatile char *str)
{
while(*str)
{
while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE) == RESET);
USART_SendData(USARTx,*str);
str++;
}
}
Mir ist es soeben gelungen das "HELLO WORLD" aus einer Interrupt-Routine zu senden. Warum funktioniert es aus einer Interrupt-Routine und nicht aus dem MAIN-Programm ???
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.