新手入门
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2016-3-21
- 在线时间
- 5 小时
|
1金钱
我想实现检测$和*之间的内容,在检测到完整的一帧数据后输出。但现在的问题是无法进入串口中断。
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
NVIC_InitStructure.NVIC_IRQChannel =USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void USART1_IRQHandler(void)
{
static uint8_t i=0;
uint8_t buffer;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
if(mark==0)
{
buffer=USART_ReceiveData(USART1)&0xFF;
GetData[i++]=buffer;
data_now=i-1;
}
if ((GetData[data_now]==0x24)&&(mark==0))
{
data_start=data_now;
}
if((GetData[data_start]==0x24)&&(GetData[data_now]==0x2A)&&(mark==0))
{
mark=1;
data_length=i-data_start;
data_end=data_now;
data_end_1=data_end+1;
i=0;
}
}
if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET)
{
USART_ClearFlag(USART1,USART_FLAG_ORE);
USART_ReceiveData(USART1);
}
}
void DealData()
{
uint8_t k;
if(mark==1)
{
for (k=data_start;k<data_length;k++)
{
USART_SendData(USART1,GetData[k]);
mark=1;
}
if(k==data_length)
{
mark=0;
}
}
}
|
|