STM32学习——中断方式下的发送数据

利用中断接收数据较为简单,但利用中断去发送数据弄了半天才搞定。。。

注:在设置USART的控制寄存器的TE位时,会发送一个空闲帧,于是便会进入中断。

错误的做法

本来的思路是中断里的代码尽可能地少,发送字符放在主函数中,类似这样

while(1)
{
	USART_SendData(DEBUG_USARTx,Buf[j]);
	//Delay(0xfffff);
	if(j>=5)
		break;
}

然而。。。要是不加Delay延时j就无法在中断服务函数中自加,通过调试,发现调用USART_SendData(),发送完成标志位TC并不是马上置位,该函数只是将数据送入数据寄存器DR,并不代表发送完毕,所以就会乱套。。。而且加了Delay后还会在最后发送一个H,惊了。。。

改进方法

参考了别人的方法,在中断里进行发送
1.利用USART_SendData()触发TC中断,然后在中断中一直发送,直到最后一个字节

//发送函数
void uart_senddata(u8* ptr)
{
	ptrdata=ptr;
	
	USART_ClearFlag(USART1, USART_FLAG_TC);	//如果不加的话可能会丢失第一个字节
	
	USART_SendData(USART1, *(ptrdata++));	//触发TC中断
}

//中断服务函数中的部分代码
	if(USART_GetITStatus(DEBUG_USARTx,USART_IT_TC)!=RESET)
	{
		if((*ptrdata)=='\0')
			USART_ClearFlag(USART1, USART_FLAG_TC);
		else
		{
			USART_SendData(DEBUG_USARTx,*ptrdata++);
		}
	}

参考的那些博客不太看得懂,调试的结果也比较神奇。。。暂且先这样吧,能用就行。。。

Reference:https://blog.csdn.net/kevinhg/article/details/40085971

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
stm32 uart中断是指在使用STM32微控制器的UART通信中,当接收到数据发送完成时,会触发中断来进行相应的处理。根据引用中的描述,我们可以在stm32f10x.h文件中找到与所使用的启动文件名字相匹配的定义部分,然后找到需要使用的中断源的名字,其右边就是中断通道号。而通道号是从18开始的,因为这些通道号是这款芯片专用的通道号,而0~17通道号在该文件的前面,是通用的通道号。因此,要找到stm32 uart中断的具体中断通道号,可以根据所使用的芯片型号和启动文件名字进行对应查找。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [STM32F0单片机快速入门七: UART中断操作](https://blog.csdn.net/wangwenxue1989/article/details/107343102)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [stm32f103——中断——UART中断服务函数](https://blog.csdn.net/qq_39577221/article/details/125266342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值