Gast
#2516668
Hallo Leute,
versuche seit zwei Tagen die UART1 eines STM32F207 in Betrieb zu nehmen,
doch leider macht diese keine Murx.
Könnte mir vl. dabei jemand helfen?
Init Source sieht so aus:
void ConfigUART( unsigned long ulWantedBaud );
void IRQHandler (void);
void SendChar(unsigned char cChar);
void TxeIRQnDisable();
void TxeIRQnEnable();
unsigned char GetTcStatus();
void DeInitUART();
void InitGPIO();
void InitUSART(unsigned long ulWantedBaud);
void InitNVIC();
void EnableCLK();
/* USART Defines */
#define RCC_USART RCC_APB2Periph_USART1
#define USART USART1
#define USART_IRQn USART1_IRQn
#define USART_IRQ_PRIO 20
/* GPIO Defines */
#define RCC_GPIO RCC_AHB1Periph_GPIOB
#define PORT GPIOB
#define PIN_RX GPIO_Pin_7
#define PIN_TX GPIO_Pin_6
#define PIN_SOURCE_RX GPIO_PinSource7
#define PIN_SOURCE_TX GPIO_PinSource6
#define GPIO_AF GPIO_AF_USART1
void ConfigUART( unsigned long ulWantedBaud )
{
EnableCLK();
InitGPIO();
InitUSART(ulWantedBaud);
InitNVIC();
}
void SendChar(unsigned char cChar)
{
USART_SendData( USART, cChar ); // send byte
}
void TxeIRQnDisable()
{
USART_ITConfig ( USART, USART_IT_TXE, DISABLE );
}
void TxeIRQnEnable()
{
USART_ITConfig ( USART, USART_IT_TXE, ENABLE );
}
/* unsigned char LN_IFP_GetTcStatus()
* returns the transimmion Status of the HW Shift register
* return: LN_TRUE: bit is set -> transmission has completed
* LN_FALSE: bit is not set -> transmission in Progress
* */
unsigned char GetTcStatus()
{
if( USART_GetFlagStatus( USART, USART_FLAG_TC) == SET )
return 1;
else
return 0;
}
void IRQHandler (void)
{
}
void EnableCLK()
{
/*ENABLE GPIOB CLOCK*/
RCC_AHB1PeriphClockCmd( RCC_GPIO, ENABLE);
/*ENABLE USART CLOCK*/
RCC_APB2PeriphClockCmd( RCC_USART, ENABLE);
}
void InitGPIO()
{
GPIO_InitTypeDef GPIO_InitStructure;
/*Set GPIO AF to USART RX*/
GPIO_PinAFConfig( PORT, PIN_SOURCE_RX, GPIO_AF);
/*Set GPIO AF to USART TX*/
GPIO_PinAFConfig( PORT, PIN_SOURCE_TX, GPIO_AF);
/*Config GPIO PINS as AF*/
GPIO_InitStructure.GPIO_Pin = PIN_TX;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init( PORT, &GPIO_InitStructure);
/*Config GPIO PINS as AF*/
GPIO_InitStructure.GPIO_Pin = PIN_RX;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_Init( PORT, &GPIO_InitStructure);
}
void InitUSART(unsigned long ulWantedBaud)
{
USART_InitTypeDef USART_InitStructure;
/*Set USART Config to default*/
// USART_DeInit(USART1);
/*Set USART Init Structure to default*/
// USART_StructInit(&USART_InitStructure);
/* Configuration of the UART:
* 8 Databits
* no parity
* no HW Flowcontrol enabled
* Rx and Tx enabled
* 1 Stopbit
* Baudrate lt. Parameter
* Transmit Complete (TC) Interrupt enabled
* TRANSMITBUFFER Empty (TXE) Interrupt enabled
* Receiver Interrupt (RXNE) enabled
* ERROR Interrupt Enabled
*/
/* USARTx configured as follow:
- BaudRate = 57600 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals)
- Receive and transmit enabled
- TC, TXE, RXNE, ERR Interrupts activated
*/
USART_InitStructure.USART_BaudRate = ulWantedBaud;
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_Rx | USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
//USART_ITConfig ( USART2, USART_IT_TC, ENABLE );
USART_ITConfig ( USART, USART_IT_RXNE, ENABLE );
USART_ITConfig ( USART, USART_IT_ORE, ENABLE );
USART_ITConfig ( USART, USART_IT_NE, ENABLE );
USART_ITConfig ( USART, USART_IT_FE, ENABLE );
USART_ITConfig ( USART, USART_IT_TXE, DISABLE );
USART_ClearFlag( USART, USART_FLAG_ORE); // IRQ zurücksetzen
USART_ClearFlag( USART, USART_FLAG_NE); // IRQ zurücksetzen
USART_ClearFlag( USART, USART_FLAG_FE); // IRQ zurücksetzen
USART_ClearFlag( USART, USART_FLAG_RXNE); // IRQ zurücksetzen
//USART_ClearFlag(USART1, USART_IT_TC); // IRQ zurücksetzen
USART_ClearFlag( USART, USART_IT_TXE); // IRQ zurücksetzen
}
void InitNVIC()
{
//NVIC_InitTypeDef NVIC_InitStructure;
NVIC_SetPriority( USART_IRQn, USART_IRQ_PRIO ); //
Priorität=20
NVIC_ClearPendingIRQ( USART_IRQn); // Vor Aktivierung einen
eventuell anstehenden Interrupt löschen
NVIC_EnableIRQ( USART_IRQn); // Uart-Interruptvektor
freischalten
}
void DeInitUART()
{
USART_DeInit( USART);
}
Wäre echt dankbar für ein bischen Hilfe, da ich ansonsten noch
ausflippe!
Verwende ich diese Initialisierung für die UART6 (hängt am gleichen Bus)
funktionierts einwandfrei.
Danke im Voraus!
Schöne Grüße,
Mark