📄 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 + -