我现在在做一个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这个值啊?调试了两天也没有找到原因。谢谢了~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>