⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 target board code

📁 Target Board Code(串口)
💻
字号:
/************************************
中断函数文件
************************************/
#include "stm32f10x_it.h"

/*****串口接收发送缓冲区*****/
u8 uart2_txbuf[SendBufSize];
u8 uart2_rxbuf[RecvBufSize];

/*****串口接收发送寄存器*****/
u16 uart2_txptr = 0; //发送缓冲指针
u16 uart2_txlen = 0;  //发送长度
u16 uart2_rxptr = 0;  //接收缓冲指针

/*****系统滴答时钟中断*****/
//变量定义
BYTE f_timetask_int = 0;		//时间片时基2ms
BYTE f_timetask_ledflash = 0;	//LED闪烁
uint c_timetask_ledflash = 0;

u16 bufSample[SampleBufSize];
u16 countSample = 0;
u8 staRecord = 0;
u8 codecheck = 0;

//中断函数
void SysTick_Handler(void)	//2ms
{
	u16 tempAD = 0;
	u8 codecheck = 0;
	u16 i;
	f_timetask_int = 1;
	c_timetask_ledflash++;
	if( c_timetask_ledflash >= 1000 )	 //1000ms
		{ c_timetask_ledflash = 0; f_timetask_ledflash = 1; }
	tempAD = ADC_GetConversionValue(ADC1);

	switch( staRecord )
	{
		case 0://准备采样
			{
				LED_REC_ON();
				staRecord = 1;
				countSample = 0;
			}break;
		case 1://进入采样过程
			{
				bufSample[countSample] = tempAD;
				countSample++;
				if( countSample >= SampleBufSize )
					{ staRecord = 2; }	
			}break;
		case 2://进入传输过程
			{
				LED_REC_OFF();
				uart2_txbuf[0] = 0xEC;
				codecheck = 0xEC;
				uart2_txbuf[1] = 0x0B;
				codecheck += 0x0B;
				uart2_txbuf[2] = (u8)((SampleBufSize*2)/256);
				codecheck += (u8)((SampleBufSize*2)/256);
				uart2_txbuf[3] = (u8)((SampleBufSize*2)%256);
				codecheck += (u8)((SampleBufSize*2)%256);
				for(i=0;i<SampleBufSize;i++)
				{
					uart2_txbuf[2*i+4] = (u8)(bufSample[i]/256);
					codecheck += uart2_txbuf[2*i+4];
					uart2_txbuf[2*i+5] = (u8)(bufSample[i]%256);
					codecheck += uart2_txbuf[2*i+5];
				}
				uart2_txbuf[SampleBufSize*2 + 4] = codecheck;
				uart2_txbuf[SampleBufSize*2 + 5] = 0x37;
				uart2_txlen	= SampleBufSize*2 + 6;
				USART_ITConfig( USART2, USART_IT_TXE, ENABLE );
				staRecord = 0;	
			}break;
		case 3://等待传输完成
			{
			    staRecord = 3;
			}break;
		default:
			staRecord = 0;break;
	}
}

/******************************************************************************
函数名称:USART1_IRQHandler
函数功能:串口1中断函数
*******************************************************************************/
void USART2_IRQHandler(void)
{
	if( USART_GetITStatus(USART2,USART_IT_RXNE) == SET ) //判断是否为接收中断
	{
		USART_ClearITPendingBit(USART2,USART_IT_RXNE);	//清除接收中断标志位
		uart2_rxbuf[uart2_rxptr] = USART_ReceiveData(USART2);
		uart2_rxptr++;
		if( uart2_rxptr == RecvBufSize )
			uart2_rxptr = 0;
	}
	if (USART_GetITStatus(USART2, USART_IT_TXE) != RESET)
	{
		USART_SendData( USART2, uart2_txbuf[uart2_txptr++] ); //字节发送,缓冲区指针自增
		if( uart2_txptr >= uart2_txlen )  		   //判断缓冲区是否发送完
		{
			USART_ClearITPendingBit( USART2,USART_IT_TXE );  //清除发送中断标志位
			USART_ITConfig( USART2, USART_IT_TXE, DISABLE );  //禁用发送中断
			USART_ITConfig( USART2, USART_IT_TC, ENABLE );	//启用发送完成中断
		}

	}
	if ( USART_GetITStatus( USART2, USART_IT_TC) != RESET) //发送完成
	{
		USART_ClearITPendingBit( USART2,USART_IT_TC );
		USART_ITConfig( USART2, USART_IT_TC, DISABLE );
		uart2_txptr = 0;
		//staRecord = 0;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -