新手上路
- 积分
- 42
- 金钱
- 42
- 注册时间
- 2015-4-9
- 在线时间
- 1 小时
|
5金钱
各位大侠,本人想实现从上位机通过串口传递固定长度16位数据到STM32的USART1口,例如在上位机上发送ABCD
但事实上进入中断之后,接收到数据只是CD,AB没有办法接收到。这是什么情况呢?
代码如下:
USART1初始化代码
void DALI_USART_Config(void)
{
USART_InitTypeDef USART_InitStructure;
/**************************************************************************/
USART_InitStructure.USART_BaudRate=9600;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_Init(USART1,&USART_InitStructure);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1,ENABLE);
}
USART1中断处理程序如下:
void USART1_IRQHandler(void)
{
int i= 0;
//标志位置位
Interrupt_flag=1;
DALI_Usart1_flag=1;
// 指示灯点亮
GPIO_SetBits(GPIOE,GPIO_Pin_7);
//特殊需要,关断其他中断,不允许其他中断进入
TIM_ITConfig( TIM2, TIM_IT_CC2 , DISABLE );
TIM_ITConfig( TIM4, TIM_IT_CC1 , DISABLE);
DALI_EXTI_Disable();
//防溢出
if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)!=RESET)
{
USART_ClearFlag(USART1,USART_FLAG_ORE);
USART_ReceiveData(USART1);
}
//接收数据
if (USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
usart_data[count++] = USART_ReceiveData(USART1);
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
if (count > 1 )
{
count = 0;
usart_data_receive = (usart_data[0]<<8)+usart_data[1];
}
}
//发送数据
if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_TXE);
printf("%c",i_dali_receive);
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
//加短延时,让发送更稳定
while(i<500)
{
i++;
}
}
//关闭指示灯
GPIO_ResetBits(GPIOE,GPIO_Pin_7);
}
请各位大侠指点一下迷津,已经调试多次了,没有办法解决啊
|
|