1、首先对tx和rx进行配置
void init_Gpio(void)
{
GPIO_InitTypeDef tx;//usart1 tx pa.9
GPIO_InitTypeDef rx;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
tx.GPIO_Pin=GPIO_Pin_9;
tx.GPIO_Speed=GPIO_Speed_50MHz;
tx.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&tx);
//usart1 rx pa.10
rx.GPIO_Pin=GPIO_Pin_10;
rx.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&rx);
}
2、对串口进行配置
void init_com(void)
{
USART_InitTypeDef p;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1, ENABLE);
init_Gpio();
NVIC_Config();
usart1_it();
p.USART_BaudRate= 115200;
p.USART_StopBits=USART_StopBits_1;
p.USART_WordLength=USART_WordLength_8b;
p.USART_Parity=USART_Parity_No;
p.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
p.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_Init(USART1,&p);
}
3、对总中断进行配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190918202136721.png`
void NVIC_Config(void)
{
NVIC_InitTypeDef p;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
p.NVIC_IRQChannel=USART1_IRQn;
p.NVIC_IRQChannelPreemptionPriority=1;
p.NVIC_IRQChannelSubPriority=1;
p.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&p);
}
4、发送中断
void usart1_it(void)
{
USART_Cmd(USART1,ENABLE);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_ITConfig(USART1,USART_IT_IDLE,ENABLE);
}
5、发送字节和字符串
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{
USART_SendData(pUSARTx,ch);
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
}
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
{
unsigned int k=0;
do{
Usart_SendByte( pUSARTx, *(str + k) );
k++;
}while (*(str + k)!='\0');
while (USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET) {}
}