学校网站开发价格,免费网站建站 知乎,老男孩设置wordpress数据库静态化,wordpress可以做表单吗常用的串口相关寄存器
USART_SR状态寄存器USART_DR数据寄存器USART_BRR波特率寄存器
串口操作相关库函数#xff08;省略入口参数#xff09;#xff1a;
void USART_Init(); //串口初始化#xff1a;波特率#xff0c;数据字长#xff0c;奇偶校验#xff0c;硬件流…常用的串口相关寄存器
USART_SR状态寄存器USART_DR数据寄存器USART_BRR波特率寄存器
串口操作相关库函数省略入口参数
void USART_Init(); //串口初始化波特率数据字长奇偶校验硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断void USART_SendData();//发送数据到串口DR
uint16_t USART_ReceiveData();//接受数据从DR读取接受到的数据FlagStatus USART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatus USART_GetITStatus();//获取中断状态标志位若有数据到来则返回一。
void USART_ClearITPendingBit();//清除中断状态标志位FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
例如我们要判断读寄存器是否非空(RXNE)操作库函数的方法是
USART_GetFlagStatus(USART1, USART_FLAG_RXNE);
我们要判断发送是否完成(TC)操作库函数的方法是
USART_GetFlagStatus(USART1, USART_FLAG_TC);void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);波特率计算方法 串口配置的一般步骤
串口时钟使能GPIO时钟使能都是这一个函数:
RCC_APB2PeriphClockCmd();串口复位:
USART_DeInit(); 这一步不是必须的GPIO端口模式设置:
GPIO_Init();
TX的模式设置为GPIO_Mode_AF_PP
RX的模式设置为浮空输入 GPIO_Mode_IN_FLOATING
或带上拉输入GPIO_Mode_IPUPS :外设的GPIO的MODE配置 串口参数初始化
USART_Init();
这个函数的第一个入口参数是指定初始化的串口标号这里选择 USART1。
第二个入口参数是一个 USART_InitTypeDef 类型的结构体指针这个结构体指针的成员变量用
来设置串口的一些参数。一般的实现格式为
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); //初始化串口从上面的初始化格式可以看出初始化需要设置的参数为波特率字长停止位奇偶校验位
硬件数据流控制模式收发。我们可以根据需要设置这些参数。开启中断并且初始化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);USART.h部分代码
#ifndef __UART_H
#define __UART_H
#include stm32f10x.hvoid My_Usart_Init(void);//串口、GPIO、中断初始化函数
void USART1_IRQHandler(void);//中断函数#endifUSART.c部分代码
#include USART.h
void My_Usart_Init(void)
{USART_InitTypeDef USART_InitStrue;GPIO_InitTypeDef GPIO_InitSture;NVIC_InitTypeDef NVIC_InitSture;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIOA时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口时钟使能USART_DeInit( USART1);//串口复位GPIO_InitSture.GPIO_PinGPIO_Pin_9;GPIO_InitSture.GPIO_ModeGPIO_Mode_AF_PP;//设置GPIOA.9的模式是复用推挽输出GPIO_InitSture.GPIO_SpeedGPIO_Speed_10MHz;GPIO_Init(GPIOA,GPIO_InitSture);//GPIO初始化GPIO_InitSture.GPIO_PinGPIO_Pin_10;GPIO_InitSture.GPIO_Mode GPIO_Mode_IN_FLOATING;//设置GPIOA.10的模式是浮空输入GPIO_InitSture.GPIO_SpeedGPIO_Speed_10MHz;GPIO_Init(GPIOA,GPIO_InitSture);//GPIO初始化USART_InitStrue.USART_BaudRate115200;//波特率115200USART_InitStrue.USART_WordLengthUSART_WordLength_8b;//8个数据位USART_InitStrue.USART_StopBitsUSART_StopBits_1;//一个停止位USART_InitStrue.USART_ParityUSART_Parity_No;//无奇偶校验位USART_InitStrue.USART_ModeUSART_Mode_Rx|USART_Mode_Tx;//收发模式USART_InitStrue.USART_HardwareFlowControlUSART_HardwareFlowControl_None;USART_Init(USART1,USART_InitStrue);//串口初始化USART_Cmd(USART1,ENABLE);//串口使能USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启接收中断第一个参数是要使能哪个串口的中断。//第二个参数是确定使能中断的类型USART_IT_RXNE是接收缓冲区非空//当接受缓冲区非空的时候触发中断TC是发送完成触发中断NVIC_InitSture.NVIC_IRQChannelUSART1_IRQn;//指出是哪一个通道(在stm32f10x.h中可查看通道)NVIC_InitSture.NVIC_IRQChannelCmdENABLE;NVIC_InitSture.NVIC_IRQChannelPreemptionPriority1;NVIC_InitSture.NVIC_IRQChannelSubPriority1;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断设置分组NVIC_Init(NVIC_InitSture);//中断初始化
}void USART1_IRQHandler(void)//中断函数
{u8 read;if(USART_GetITStatus(USART1,USART_IT_RXNE)){readUSART_ReceiveData(USART1);//读取数据USART_SendData(USART1,read);}
}main.c部分代码
#include stm32f10x.h
#include USRT.hint main(void)
{ My_Usart_Init();while(1);
}