求助帖:STM32F4串口通信数据接收问题

2019-07-20 22:48发布

我现在在做一个STM32F4利用DAC输出模拟电压控制电机旋转的实验,代码是这样的:/*电压转换函数*/
void Dac1_Set_Vol(u16 vol)
{
        temp=vol;
        temp=((temp-500)/79500)*4.9+0.1;
        temp=temp*4096/3.3;
        DAC_SetChannel1Data(DAC_Align_12b_R,temp);
}

/*中断服务函数*/
void USART1_IRQHandler(void)
{
        if(USART_GetITStatus(USART1,USART_IT_RXNE)){
               
                res=USART_ReceiveData(USART1);
                USART_SendData(USART1,res);
                //res=20000;
        }

}
/*主函数*/
int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//
        delay_init(168);      //初始化延时函数
        My_CONTROL_Init();                //初始化电机驱动器使能端                       
        My_MODE_Init();                         //初始化电机驱动器模式控制       
        My_USART1_Init();      //初始化串口
        My_Dac1_Init();        //初始化DAC
        DAC_SetChannel1Data(DAC_Align_12b_R,0);//DAC初始值设置为0
while(1)
{
         temp=res;//res为全局变量
         Dac1_Set_Vol(temp);//调用电压输出转换公式
   delay_ms(100);
}
}

现象是:在中断服务函数里面,我注释掉res=20000,然后通过串口调试助手发送接收数据,显示是正常的,但是DAC口没有模拟电压输出。如果我加上res=20000这个值,串口进入中断之后,res=20000这个值是可以被主函数调用输出正常状态的模拟电压。
问题是:为什么我使用串口调试助手发送数据20000,赋值给res(注释掉中断函数里面的res=20000),无法在主函数里面正确调用res这个值啊?调试了两天也没有找到原因。谢谢了~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。