OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4598|回复: 1

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

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2016-1-7
在线时间
5 小时
发表于 2016-4-18 10:41:27 | 显示全部楼层 |阅读模式
3金钱
我现在在做一个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这个值啊?调试了两天也没有找到原因。谢谢了~

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2014-11-28
在线时间
27 小时
发表于 2016-4-19 12:04:29 | 显示全部楼层
将res设置为静态类型的试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 00:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表