附上代码:
#if 1 //PB6 PB7
#define USART1_ALT_GPIO_CLK RCC_AHB1Periph_GPIOB
#define USART1_ALT_GPIO GPIOB
#define USART1_TX_PIN GPIO_Pin_6
#define USART1_RX_PIN GPIO_Pin_7
#define TX_ALT_PIN GPIO_PinSource6
#define RX_ALT_PIN GPIO_PinSource7
#else //PA9 PA10
#define USART1_ALT_GPIO_CLK RCC_AHB1Periph_GPIOA
#define USART1_ALT_GPIO GPIOA
#define USART1_TX_PIN GPIO_Pin_9
#define USART1_RX_PIN GPIO_Pin_10
#define TX_ALT_PIN GPIO_PinSource9
#define RX_ALT_PIN GPIO_PinSource10
#endif
#define TEST_PA9  

Aout(9)
#define TEST_PA10 PAout(10)
void Test_PA9PA10(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TEST_PA9=0;
TEST_PA10=0;
TEST_PA9=1;
TEST_PA10=1;
TEST_PA9=0;
TEST_PA10=0;
}
//??????IO ?®??1
//bound:?¨????
void uart_init(u32 bound)
{
//GPIO?????è??
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHB1PeriphClockCmd(USART1_ALT_GPIO_CLK,ENABLE); //????GPIOA?±??
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//????USART1?±??
//?®??1????????????????
GPIO_PinAFConfig(USART1_ALT_GPIO,TX_ALT_PIN,GPIO_AF_USART1); //GPIOA9??????USART1
GPIO_PinAFConfig(USART1_ALT_GPIO,RX_ALT_PIN,GPIO_AF_USART1); //GPIOA10??????USART1
//USART1????????
GPIO_InitStructure.GPIO_Pin = USART1_TX_PIN | USART1_RX_PIN; //GPIOA9??GPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //????50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //???ì????????
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //????
GPIO_Init(USART1_ALT_GPIO,&GPIO_InitStructure); //??????PA9??PA10
//USART1 ???????è??
USART_InitStructure.USART_BaudRate = bound;//?¨?????è??
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×??¤??8??????????
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); //???????®??1
USART_Cmd(USART1, ENABLE); //?????®??1
USART_ClearFlag(USART1, USART_FLAG_TC);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//?????à??????
//Usart1 NVIC ????
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//?®??1?????¨??
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//??????????3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //×???????3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨??????
NVIC_Init(&NVIC_InitStructure); //?ù?????¨????????????VIC?????÷??
//Test_PA9PA10();
}
void USART1_SendChar(u8 ch)
{
while((USART1->SR&0X40)==0);//???··???,?±??·????ê±?
USART1->DR = (u8) ch;
}
void USART1_IRQHandler(void) //?®??1????·??????ò
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //????????(????????????±?????0x0d 0x0a?á??)
{
Res =USART_ReceiveData(USART1);//(USART1->DR); //????????????????
USART1_SendChar(Res);
}
}