串口寄存器配置

来源:互联网 发布:精雕软件视频教程 编辑:程序博客网 时间:2024/06/10 08:29

串口操作相关库函数

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;

串口配置的一般步骤:
串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
串口复位:USART_DeInit();这一步不是必须的
GPIO端口模式设置:GPIO_Init();模式设置为GPIO_Mode_AF_PP,复用推挽。
串口参数初始化USART_Init();
开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)

      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;//设置引脚速率为10MHzGPIO_InitStructure.GPIO_Mode  =   GPIO_Mode_AF_PP;//设置引脚模式为通用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure); //调用库函数,初始化GPIOAGPIO_InitStructure.GPIO_Pin   =  GPIO_Pin_10;//选择要控制的GPIOA引脚GPIO_InitStructure.GPIO_Speed =   GPIO_Speed_10MHz;//设置引脚速率为10MHzGPIO_InitStructure.GPIO_Mode  =   GPIO_Mode_IN_FLOATING;//设置引脚模式为浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure); //调用库函数,初始化GPIOAUSART_InitTypeDef USART_InitStructure;//定义USART初始化类型结构体USART_InitStructure.USART_BaudRate = 115200;//波特率设为115200USART_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;//失能CTSUSART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使能发送和接收USART_Init(USART1, &USART_InitStructure);//调用库函数,初始化USART1USART_Cmd(USART1, ENABLE); //使能USART1  USART_ITConfig(USART1,USART_TI_RXNE,ENABLE);//开启接收中断NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//配置中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//配置抢占优先级为0NVIC_InitStructure.NVIC_IRQChannelSubPriority  = 0;//配置响应优先级为0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//NVIC使能NVIC_Init(&NVIC_InitStructure);//向寄存器写入参数}void   USART1_IRQHandler((){u8 resif(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);}*/




原创粉丝点击