STM32单片机串口复位操作流程

一、问题复现
当串口在10s内没有接收到数据,这时重新初始化串口,重新正常的初始化操作可能导致串口不能正常工作起来,需要加上复位该串口时钟的命令,如下加入:RCC->APB1RSTR|=1<<18; //复位串口3!!! RCC->APB1RSTR&=~(1<<18); //停止复位!!!

	float temp;
	u16 mantissa;
	u16 fraction;	   
	temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV
	mantissa=temp;				 //得到整数部分
	fraction=(temp-mantissa)*16; //得到小数部分	 
     mantissa<<=4;
	mantissa+=fraction; 
	 
	GPIO_Set(UART_RT3_PORT,UART_RT3_PIN,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_NONE); 		//PA5推挽输出
	CTR1_485_H;
	CTR1_485_L;							//默认为接收模式	
	
	GPIO_Set(UART_RT3_PORT,USART3_TX_PIN | USART3_RX_PIN,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_NONE);	//PB10,PB11,复用功能,上拉 
 	GPIO_AF_Set(UART_RT3_PORT,10,7);		//PB10,AF7
	GPIO_AF_Set(UART_RT3_PORT,11,7);		//PB11,AF7 
 
	RCC->APB1ENR|=1<<18;  				//使能串口3时钟  
	RCC->APB1RSTR|=1<<18;   				//复位串口3!!!
	RCC->APB1RSTR&=~(1<<18);				//停止复位!!!	   
	//波特率设置
 	USART3->BRR=mantissa; 		// 波特率设置	 
	USART3->CR1|=0X200C;  		//1位停止,无校验位.

	USART3->CR1 |= 1<<2;  		//串口接收使能
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于STM32单片机串口通信,你可以使用USART(通用同步/异步收发器)来实现。以下是一些步骤可以帮助你开始进行串口通信: 1. 首先,你需要在STM32的引脚上配置和初始化USART功能。根据你所使用的具体型号和引脚分配情况,你需要查阅对应的数据手册或者开发板用户手册,找到与USART相关的引脚,并进行正确的引脚配置。 2. 接下来,你需要在STM32的代码中初始化USART外设。这涉及到设置波特率、数据位数、停止位等参数。你可以通过调用相应的库函数或者直接配置USART寄存器来完成初始化。 3. 一旦USART外设初始化完成,你就可以使用相应的库函数或者直接访问USART寄存器来发送和接收数据。你可以使用轮询方式或者中断方式进行数据的发送和接收操作。 4. 在发送数据时,你可以使用库函数或者访问USART寄存器来将要发送的数据写入发送缓冲区,然后等待发送完成。 5. 在接收数据时,你可以使用库函数或者读取USART寄存器来检查是否有新的接收数据可用,并将数据读取到接收缓冲区。 需要注意的是,以上只是一个简单的概述,并不包含具体的代码实现细节。实际应用中,你还需要考虑数据的解析、错误处理、流控制等问题。你可以参考STM32提供的官方文档和相应的开发环境(如CubeMX和HAL库)来获取更详细的信息和示例代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值