本例程经过PC机的串口调试帮手将数据发送至STM32,接纳数据后将所接纳的数据又发送至PC机,详细下面详谈。。。
实例一:
void USART1_IRQHandler(u8 GetData)
{
u8 BackData;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中止发生
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //铲除中止标志.
GetData = UART1_GetByte(BackData);
USART1_SendByte(GetData);
GPIO_SetBits(GPIOE, GPIO_Pin_8 ); //LED闪耀,接纳成功发送完结
delay(1000);
GPIO_ResetBits(GPIOE, GPIO_Pin_8 );
}
}
这是最基本的,将数据接纳完结后又发送出去,接纳和发送在中止函数里履行,main函数里无其他要处理的。
长处:简略,合适很少数数据传输。
缺陷:无缓存区,而且对数据的正确性没有判别,数据量稍大或许导致数据丢掉
实例二:
void USART2_IRQHandler()
{
if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET) //中止发生
{
USART_ClearITPendingBit(USART2,USART_IT_RXNE); //铲除中止标志
Uart2_Buffer[Uart2_Rx_Num] = USART_ReceiveData(USART2);
Uart2_Rx_Num++;
}
if((Uart2_Buffer[0] == 0x5A)&&(Uart2_Buffer[Uart2_Rx_Num-1] == 0xA5))
Uart2_Sta=1;
if(USART_GetFlagStatus(USART2,USART_FLAG_ORE) == SET) //溢出
{
USART_ClearFlag(USART2,USART_FLAG_ORE);
USART_ReceiveData(USART2); //读DR
}
}
if( Uart2_Sta )
{
for(Uart2_Tx_Num=0;Uart2_Tx_Num < Uart2_Rx_Num;Uart2_Tx_Num++)
USART2_SendByte(Uart2_Buffer[Uart2_Tx_Num]); //发送数据
Uart2_Rx_Num = 0; //初始化
Uart2_Tx_Num = 0;
Uart2_Sta = 0;
}
这是加了数据头和数据尾的接纳方法,数据头和尾的个数可增加,此处只用于调试之用。中止函数用于接纳数据以及判别数据的头尾,第二个函数在main函数里依照查询方法履行。
长处:较简略,选用缓存区接纳,对进步数据的正确行有必定的改进 。
缺陷:要是第一次数据接纳过错,回不到初始化状况,有必要复位操作 。
实例三:
vvoid USART2_IRQHandler()
{
}
if( Uart2_Tx != Uart2_Rx )
{
}
选用FIFO方法接纳数据,由0x3F可知此处最大接纳量为64个,可变,中止函数只担任收,另一函数在main函数里履行,FIFO方法发送。
长处:发送和接纳都很自在,中止占用时刻少,有利于MCU处理其它。
缺陷:对数据的正确性没有判别,一概悉数接纳。
实例四:
void USART2_IRQHandler()
{
}
if( Uart2_Sta )
{
}
数据选用数据包的方式接纳,接纳后存放于缓存区,经过判别数据头和数据尾(可变)来判别数据的“包”及有用性,中止函数用于接纳数据和判别头尾以及数据包长度,另一函数在main函数里履行,担任发送该段数据。
长处:合适打包传输,稳定性和可靠性很有确保,可随意发送,主动选择有用数据。
缺陷:缓存区数据长度要根据“包裹”长度设定, 要是屡次接纳后无头无尾,到有头有尾的那一段数据刚好跨过缓存区最前和最终方位时,或许导致本次数据丢掉,不过这种状况简直没有或许。