串口寄存器配置

串口操作相关库函数

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;		//设置引脚速率为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);
}

*/





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值