stm32f103c8USART1串口只能发送不能接收问题解决

        今天跟着江科大学stm32串口接收字节的时候遇到了一个问题,那就是我的串口只能发不能收(不能接受串口助手发过来的数据)。在这个问题卡了三个小时,终于在这两篇文章找到答案:

1)查询法:[STM32] 关于USART接收中断的BUG和注意事项_stm32串口中断函数接受数据不完整-优快云博客
2)中断法:【经验分享】USART 中断方式接收无响应问题的一种情况及其处理方法 - STM32团队 ST意法半导体中文论坛 (stmicroelectronics.cn)

        一、下面是我用过但无效的方法:

        1)下载前boot0置一,下载后boot0置零

        

        在我理解就是跟51一样在stc-isp那边烧录。无效且原因不知

        2)将板子自带的ttl转usb模块不供电。无效且原因不知

             原文:STM32串口能发送数据,但接收不到上位机发送的数据_stm32串口只能发送不能接收-优快云博客

        3)换块板子,一样问题。。。

        二、我使用的且有效的办法

        江科大中断源码:

void USART1_IRQHandler(void)
{
	if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)		//判断是否是USART1的接收事件触发的中断
	{
		Serial_RxData = USART_ReceiveData(USART1);				//读取数据寄存器,存放在接收的数据变量
		Serial_RxFlag = 1;										//置接收标志位变量为1
		USART_ClearITPendingBit(USART1, USART_IT_RXNE);			//清除USART1的RXNE标志位
																//读取数据寄存器会自动清除此标志位
																//如果已经读取了数据寄存器,也可以不执行此代码
	}
}

        我更改后的代码:

        1)查询法:

        通过检查USART->DR,接收寄存器是否为空,不为空就是有数据,读出数据返回标志位

        ps:本来我以为是中断法在生效,但是看了串口助手的接收端,没有收到数据,也就是说没有进入中断,因此本方法是查询法,中断判断内容是无效的,可以忽略。

void USART1_IRQHandler(void)
{
	//如果中断触发
	if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET)
	{
		Serial_Data = USART_ReceiveData(USART1);
		Serial_Flag = 1;
		if(USART_GetITStatus(USART1, USART_FLAG_RXNE) == SET)
		{
			Serial_SendByte(Serial_Data);
			//清除标志位
			USART_ClearITPendingBit(USART1, USART_FLAG_RXNE);
		}
	}
}

       2)中断法:

        在江科大的NVIC配置中,串口的抢占优先级和子优先级都是1。不知道是不是程序里有别的中断函数,我将两个优先级全部改成0。中断程序可以运行。

	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;		//指定NVIC线路的抢占优先级为0
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;		//指定NVIC线路的响应优先级为0

        三、总结

        如果中断不进入,提高优先级。

        可以通过读取寄存器判断是否接收到信息。

        四、修改(改于发布后一天,又遇到这个问题)

        以上写的全是**,原因只有一个,接线不稳,换几根杜邦线

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值