串口操作相关库函数
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);
}
*/