我想用中断形式中的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中断标志,与这个程序会有什么不同呢????
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);//发送一个字节数据
}
}
你这个中断程序我看明白了,那主函数里如何写呢,能进入中断呢,写出来,我看看,麻烦了
追答我知道开中断,我是想问,开完之后,如果想发送数据,在主函数数里,做什么他才能进入中断,或者是说,怎样才能USART_GetITStatus(USART1,USART_IT_TXE)!=RESET,这个中的标志位USART_IT_TXE如何能置1,开完中断在主函数里等待就行吗?
追答往发送寄存器中送数据就自动进入中断了
对了,你还需要在主函数里开中断关中断来控制是否进入中断