这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 有没有大神帮忙读一下这段程序。。。

共8条 1/1 1 跳转至

有没有大神帮忙读一下这段程序。。。

助工
2013-06-01 12:31:57     打赏

void USART_IRQHandler(void)

{

    char Rx_dat;

    if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)

    {

        USART_ClearITPendingBit(USART1,USART_IT_RXNE);

        GPIO_WriteBit(GPIOB,GPIO_Pin_10,(BitAction)0x01);//这里备注上写的是开始传输,我怀GPIOB是不是应该是GPIOA,如果是,那置1有什么用?

        RX_dat=USART_ReceiveData(USART1)&0X7F;//为什么要与7f与?不是应该传8位数据,这样不是少了一位吗?

        USART_SendData(USART1,RX_dat);

        while(USART_GetFlagstatus(USART1,USART_FLAG_TXE)==RESET){}


    }

}我还有个地方不明白,它的中断是每发送或接受一个字节产生还是所有数据都传完才有的?每发送一个字节的数据产生的标志位是自动清零还是得软件清零?




关键词: 有没有     大神     帮忙     一下     这段     程序    

高工
2013-06-01 13:17:43     打赏
2楼

中断是每发送或接受一个字节产生。

参见ST参考手册:

当一字符被接收到时,
● RXNE 位被置位。它表明移位寄存器的内容被转移到RDR。换句话说,数据已经被接收并且
可以被读出(包括与之有关的错误标志)。
●  如果RXNEIE 位被设置,产生中断。
●  在接收期间如果检测到帧错误,噪音或溢出错误,错误标志将被置起,  
●  在多缓冲器通信时,RXNE 在每个字节接收后被置起,并由DMA对数据寄存器的读操作而
清零。
●  在单缓冲器模式里,由软件读USART_DR寄存器完成对RXNE 位清除。RXNE 标志也可以通
过对它写0来清除。RXNE 位必须在下一字符接收结束前被清零,以避免溢出错误。


高工
2013-06-01 13:26:30     打赏
3楼

如果发送数据完成,将产生发送完成标志。对应SR寄存器中的TC标志

使用下列软件过程清除TC位:
1.读一次USART_SR寄存器;
2.写一次USART_DR寄存器。



助工
2013-06-01 14:00:14     打赏
4楼
那就是说TC是自动清零的?

高工
2013-06-01 14:05:14     打赏
5楼
检查能不能发送,看tce。另外,usart有多种产生中断的条件,但是总中断只有一个。所以在进入总中断之后要判断到底是哪个中断。这个判断就是你上边的程序

高工
2013-06-01 14:08:52     打赏
6楼
USART_ClearITPendingBit(USART1,USART_IT_RXNE); 也就是说,你上边读过了rxne,这句就没有必要了。你可以跟踪下,看看运行完那个判断之后rxne是多少。我没试验过。

助工
2013-06-01 22:54:00     打赏
7楼
哦,谢谢。。。

菜鸟
2014-09-18 13:19:53     打赏
8楼
这里的置1是不是类似于选择接收发送模式选定?至于接收内容就要看你内容的具体含义了

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]