stm32学习笔记,USART库函数,初步

//主函数,主要是开启中断分组,如果不需要中断或中断分组在其他位置也可以
int main (void){//主程序
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	RCC_Configuration(); //时钟设置
	USART1_Init();
	while(1){
	
	}
}

配置过程:初始化函数

void USART1_Init(void){ 
	GPIO_InitTypeDef  GPIO_InitStructure; //定义GPIO的初始化枚举结构
	USART_InitTypeDef  USART1_InitStructure; //定义USART1的初始化枚举结构
	NVIC_InitTypeDef	NVRC_InitStructure;		//	 定义NVRC的初始化枚举结构
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);  	  //使能端口A时钟   和 USART1

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //发送                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出    
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)   
	GPIO_Init(GPIOA,&GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //接收                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)   
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	//串口参数,个人认为一般可以在头文件定义一个结构体,然后通过头文件修改过来,这里只是学习阶段
	USART1_InitStructure.USART_BaudRate= 115200 ;	//波特率
	USART1_InitStructure.USART_WordLength=	USART_WordLength_8b;	//数据位
	USART1_InitStructure.USART_StopBits= USART_StopBits_1;	//停止位
	USART1_InitStructure.USART_Parity=	USART_Parity_No;		//奇偶校验
	USART1_InitStructure.USART_Mode=  USART_Mode_Rx|USART_Mode_Tx;	   //收发
	USART1_InitStructure.USART_HardwareFlowControl=  USART_HardwareFlowControl_None;   //硬件流
	USART_Init(USART1,&USART1_InitStructure);

	USART_Cmd(USART1,  ENABLE);	//使能串口

	
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);   //开启接收中断函数
	//USART_IT_CTS:  CTS change interrupt (not available for UART4 and UART5)   没看懂
 	//USART_IT_LBD:  LIN Break detection interrupt   
	//USART_IT_TXE:  Transmit Data Register empty interrupt	//发送寄存器空,可以中断发用,但是用前开启,发完关闭。2022-4-20:根据原理来说TXE会比TC要快一些,
	//USART_IT_TC:   Transmission complete interrupt		//传输完成中断,可以中断发送用,可以一直开着,但是发之前要清除标志位
	//USART_IT_RXNE: Receive Data register not empty interrupt	//接收非空,一般中断接收开启
	//USART_IT_IDLE: Idle line detection interrupt			//空闲中断  hal库时搭配DMA发送使用过,但是库函数还没使用, 后续测试再来
	//USART_IT_PE:   Parity Error interrupt		//奇偶校验错误
	//USART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)//错误终端

	NVRC_InitStructure.NVIC_IRQChannel=USART1_IRQn;	 //中断通道
	NVRC_InitStructure.NVIC_IRQChannelCmd =	 ENABLE ;	 //使能
	NVRC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;  //抢占优先级
	NVRC_InitStructure.NVIC_IRQChannelSubPriority		=0;		//响应优先级
	NVIC_Init(&NVRC_InitStructure);
		
}

中断函数

//接收中断,
void USART1_IRQHandler(void){
	u8 res;
	if(USART_GetITStatus(USART1,USART_IT_RXNE)){
		res=USART_ReceiveData(USART1);
		USART_SendData(USART1,res);	
	}
}

-----------------------------2022-4-19

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值