串口操作相关库函数
void USART_Init();//串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
FlagStatusUSART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatusUSART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位
typedef struct
{
uint32_t USART_BaudRate; /*设置波特率,对应寄存器USART_BRR */
uint16_t USART_WordLength; /*指定数据长度,对应寄存器USART_CR1的位12 */
uint16_t USART_StopBits; /*指定停止位的位数,对应寄存器USART_CR2的位13:12 */
uint16_t USART_Parity; /*指定校验方式,对应寄存器USART_CR1的位10:9 */
uint16_t USART_Mode; /*指定了USART的位数,对应寄存器USART_CR2的位13:12*/
uint16_t USART_HardwareFlowControl; /*使能或失能CTS硬件流控制,对应寄存器USART_CR3的位9 */
} USART_InitTypeDef;
NVIC_Init();
USART_ITConfig();
⑥使能串口:USART_Cmd();
⑦编写中断处理函数:USARTx_IRQHandler();
⑧串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
⑨串口传输状态获取:
FlagStatusUSART_GetFlagStatus(USART_TypeDef* USARTx,uint16_t USART_FLAG);
voidUSART_ClearITPendingBit(USART_TypeDef*USARTx, uint16_t USART_IT);
/* void My_USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO_InitTypeDef类型的结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//开启USART1时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //选择要控制的GPIOA引脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //设置引脚速率为10MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //设置引脚模式为通用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); //调用库函数,初始化GPIOA GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //选择要控制的GPIOA引脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //设置引脚速率为10MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //设置引脚模式为浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure); //调用库函数,初始化GPIOA USART_InitTypeDef USART_InitStructure; //定义USART初始化类型结构体 USART_InitStructure.USART_BaudRate = 115200; //波特率设为115200 USART_InitStructure.USART_WordLength = USART_WordLength_8b; //1个起始位,8个数据位 USART_InitStructure.USART_StopBits = USART_StopBits_1; //1个停止位 USART_InitStructure.USART_Parity = USART_Parity_No ; //无奇偶校验 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//失能CTS USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使能发送和接收 USART_Init(USART1, &USART_InitStructure); //调用库函数,初始化USART1 USART_Cmd(USART1, ENABLE); //使能USART1 USART_ITConfig(USART1,USART_TI_RXNE,ENABLE); //开启接收中断 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //配置中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//配置抢占优先级为0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//配置响应优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //NVIC使能 NVIC_Init(&NVIC_InitStructure);//向寄存器写入参数 } void USART1_IRQHandler(() { u8 res if(USART_GetFlagStatus(USART1,USART_TI_RXNE)) { USART_ReceiveData(USART1); USART_SendData(USART1,res); } } int main() { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC的优先级为4种抢占优先级和4种响应优先级 My_USART1_Init(); while(1); } */