现在我咋用STM32进行双单片机串口通信,我对串口中断发送程序这不太清除?

我想用中断形式中的USART_GetITStatus(USART1,USART_IT_TXE)来进行中断处理,现在中断函数如下
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_TXE)!=RESET)
{
if(USART1_Tx_Head < USART1_Tx_Tail)
{
USART_SendData(USART1, Send_Buffer[USART1_Tx_Head++]);
//while (!(USART1->SR & USART_FLAG_TXE));中断方式不用查?
}
else
{ /*只要发送寄存器空,就会一直有中断,要是不发送数据时,
把发送中断关闭,否则会重复进入中断,
只在开始发送时,才打开。*/
USART_ITConfig(USART1,USART_IT_TXE,DISABLE);
}
}
}

,我现在不知道如何才能进入这个中断,主函数里把缓存数组定义赋值之后,在那等待就行了吗?他会自动进入中断吗?还有如果用TC中断标志,与这个程序会有什么不同呢????

你可以先用串口调试助手,向单片机发送一个数据,如果有j-link,用j-link在中断函数里设置断点,进入中断后程序会停在usart中断那里,还有,通常情况下不使用发送中断,而是接收中断,对于多数据发送,可以等待发送完成标志
while(!(USART1->SR & 0X80));//判断发送寄存器的数据是否到移位寄存器发送
USART_SendData(USART2, rxdata2); /* Write one byte to the transmit data register */
把这个放在循环里,就可以连续发送多个数据,
除此之外,还可以用DMA的方式,让处理器自动发送多个数据到串口追问

我现在没有用过寄存器编程,主要就是用函数,你能给我一个用函数编程的例子吗?不用中断发送的?

追答

我也只有判断发送完成寄存器用了寄存器,其他用的是MDK的example里的例子里的设置USART
void USART1_IRQHandler(void)
{
u16 rxdata1;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
/* Read one byte from the receive data register */
rxdata1=USART_ReceiveData(USART1);//获取最近接收的数据

while(!(USART1->SR & 0X80));//判断发送寄存器的数据是否到移位寄存器发送
/* Write one byte to the transmit data register */
USART_SendData(USART1, rxdata1);//发送一个字节数据
}
}

追问

你这个中断程序我看明白了,那主函数里如何写呢,能进入中断呢,写出来,我看看,麻烦了

追答

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-31
先开中断,在中断函数里判断是还是发中断,再单独做处理,收发都可以中断运行!追问

我知道开中断,我是想问,开完之后,如果想发送数据,在主函数数里,做什么他才能进入中断,或者是说,怎样才能USART_GetITStatus(USART1,USART_IT_TXE)!=RESET,这个中的标志位USART_IT_TXE如何能置1,开完中断在主函数里等待就行吗?

追答

往发送寄存器中送数据就自动进入中断了

对了,你还需要在主函数里开中断关中断来控制是否进入中断

第2个回答  2014-03-31
中断函数需要注册,中断向量表

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网