Код: Выделить всё
#include "stm32l1xx_gpio.h"
#include "stm32l1xx.h"
int Usart_Initialization()
{
USART_InitTypeDef UsartStructure;
UsartStructure.USART_BaudRate = 9600;
UsartStructure.USART_WordLength = USART_WordLength_8b;
UsartStructure.USART_StopBits = USART_StopBits_1;
UsartStructure.USART_Parity = USART_Parity_No ;
UsartStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
UsartStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init(USART3, &UsartStructure);
return 0;
}
int Gpio_initialization()
{
GPIO_InitTypeDef GpioStructure;
//-----PORTB-----// --- PB8
GpioStructure.GPIO_Pin = GPIO_Pin_8;
GpioStructure.GPIO_Mode = GPIO_Mode_OUT;
GpioStructure.GPIO_Speed = GPIO_Speed_40MHz ; //GPIO_Speed_2MHz
GpioStructure.GPIO_OType = GPIO_OType_PP;
GpioStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // GPIO_PuPd_DOWN
GPIO_Init(GPIOB, &GpioStructure);
//-----PORTB-----// --- PB10 - UART3_TX
GpioStructure.GPIO_Pin = GPIO_Pin_10;
GpioStructure.GPIO_Mode = GPIO_Mode_AF; // GPIO_Mode_AF RECOVER!!!
GpioStructure.GPIO_Speed = GPIO_Speed_40MHz ; //GPIO_Speed_2MHz
GpioStructure.GPIO_OType = GPIO_OType_PP;
GpioStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // GPIO_PuPd_DOWN
GPIO_Init(GPIOB, &GpioStructure);
GPIO_PinAFConfig( GPIOB, GPIO_PinSource10, GPIO_AF_USART3 );
//-----PORTB-----// --- PB11 - UART3_RX
GpioStructure.GPIO_Pin = GPIO_Pin_11;
GpioStructure.GPIO_Mode = GPIO_Mode_AF; // GPIO_Mode_IN RECOVER!!!
GpioStructure.GPIO_Speed = GPIO_Speed_40MHz ; //GPIO_Speed_2MHz
GpioStructure.GPIO_OType = GPIO_OType_PP;
GpioStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // GPIO_PuPd_DOWN
GPIO_Init(GPIOB, &GpioStructure);
GPIO_PinAFConfig( GPIOB, GPIO_PinSource11, GPIO_AF_USART3 );
//-----PORTA-----// --- PA11
GpioStructure.GPIO_Pin = GPIO_Pin_11;
GpioStructure.GPIO_Mode = GPIO_Mode_OUT;
GpioStructure.GPIO_Speed = GPIO_Speed_40MHz ; //GPIO_Speed_2MHz
GpioStructure.GPIO_OType = GPIO_OType_PP;
GpioStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // GPIO_PuPd_DOWN
GPIO_Init(GPIOA, &GpioStructure);
//-----PORTA-----// --- PA10
GpioStructure.GPIO_Pin = GPIO_Pin_10;
GpioStructure.GPIO_Mode = GPIO_Mode_IN;
GpioStructure.GPIO_Speed = GPIO_Speed_40MHz ; //GPIO_Speed_2MHz
GpioStructure.GPIO_OType = GPIO_OType_PP;
GpioStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // GPIO_PuPd_DOWN
GPIO_Init(GPIOA, &GpioStructure);
return 0;
}
void USART3_IRQHandler( void )
{
char *ptRX;
if( USART3 -> SR & USART_SR_TC)
GPIO_SetBits(GPIOB, GPIO_Pin_8);
}
int main()
{
int i, j;
char strTX[64] = "AT";
char* pszTX = strTX;
// Clocks
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOB, ENABLE );
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE );
RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART3, ENABLE);
// GPIO
Gpio_initialization();
//UART
Usart_Initialization();
USART_Cmd( USART3, ENABLE );
// Interrupts
NVIC_EnableIRQ( USART3_IRQn );
USART_ITConfig( USART3, USART_CR1_TCIE, ENABLE);
//__enable_irq ();
USART_SendData(USART3, *pszTX);
while(1);
}
Кстати, приёмник начал работать только после того, как установил ножку приёмника не как вход, а как альтернативную функцию. Не смог найти в даташите, в какой режим устанавливать ножки, когда ими управляет периферия. В документации на тот же STM32F100 в разделе GPIO есть таблички. Причём для ножки-приёмника там указано input floating.
Заранее спасибо!


