STM32串口通讯,带中断
上位机通过串口发送一个数据->串口接收到数据产生中断->将接收发送给串口
#include "stm32f10x.h"
/****************************
步骤:
(①串口、GPIO时钟使能->②串口、GPIO初始化->③使能串口->④开启接收中断->⑤配置中断优先级->⑤中断入口函数)
1 串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
在RCC.H里面
2 串口复位:USART_DeInit(); 这一步不是必须的
3 GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF_PP
4 串口参数初始化:USART_Init();
5 开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
⑥使能串口:USART_Cmd();
⑦编写中断处理函数:USARTx_IRQHandler();
⑧串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
⑨串口传输状态获取:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);
****************************/
void My_USART1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStrue; //定义结构体,结构体名称为GPIO_InitStrue,结构体里面包含GPIO的模式,引脚,速度,这样写可以节省代码长度
USART_InitTypeDef USART_InitStrue; //定义结构体,包含串口很多内容
NVIC_InitTypeDef NVIC_InitStrue;
/*****①IO口、串口时钟使能*****/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //GPIOA时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE