OpenEdv-开源电子网

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

关于DAC输出只能输出一次值的一点小问题

[复制链接]

28

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2017-2-13
在线时间
110 小时
发表于 2017-2-28 11:54:42 | 显示全部楼层 |阅读模式
1金钱
看了原子的串口通信、ADC,DAC,PWM,PWM+DAC视频,但是还是没有搞懂这个地方卡在哪了,还望有经验的师傅指点一二。谢谢了
以下是探索者STM32+串口转WiFi模块的无线通讯部分收到数据后输出DAC的代码
[mw_shl_code=applescript,true]while(1)
{
        if(timex)timex--;
        if(timex==1)LCD_Fill(30+54,100,239,112,WHITE);
        t++;
        delay_ms(10);
        if(USART3_RX_STA&0X8000)                //接收到一次数据
        {
        rlen=USART3_RX_STA&0X7FFF;        //得到本次接收到的数据
        USART3_RX_BUF[rlen]=0;                //添加结束符
        printf("%s",&USART3_RX_BUF[11]);        //发送到串口                                
        sprintf((char*)p,"收到%d字节,内容如下",rlen-11);//得到接收到实际有效数据的字节数
        LCD_Fill(30+54,115,239,130,WHITE);
        POINT_COLOR=BRED;
        Show_Str(30+54,115,156,12,p,12,0);                         //显示接收到实际有效的数据长度
        POINT_COLOR=BLUE;
        LCD_Fill(30,130,239,319,WHITE);
        strncpy(USART3_SEND_BUF,&USART3_RX_BUF[11],rlen-11);
        Show_Str(30,130,180,190,&USART3_RX_BUF[11],12,0);//显示接收到实际有效数据                                                                               
        USART3_RX_STA=0;
        if(constate!='+')t=1000;                //状态还未连接,立即更新连接
        else t=0;                   //状态为已经连接,10s后再检查                               
        }                                                                
        if(t==1000)//连续10s没有接收到任何数据,检查连接是否还存在
        {
                LCD_Fill(30+54,125,239,130,WHITE);
                LCD_Fill(60,80,120,92,WHITE);
                constate=atk_8266_consta_check();//得到连接
                if(constate=='+')Show_Str(30+30,80,200,12,"连接成功",12,0);  //连接状态
                else Show_Str(30+30,80,200,12,"连接失败",12,0);          
                t=0;
        }
        if((t%20)==0)LED0=!LED0;
        atk_8266_at_response(1);
        Motor_control(&USART3_RX_BUF[11]);
}
[/mw_shl_code]

以下是while循环里的Motor_control(&USART3_RX_BUF[11])函数,传参暂时没用,先把DAC功能实现先
[mw_shl_code=c,true]void Motor_control(u8 * speed)
{               
        u16 adcx;
        float temp;
        u8 t=0,index =5;         
        u16 pwmval=0;
        u8 key = 0 ;
        POINT_COLOR=RED;
        LCD_ShowString(30,50+50+70,200,16,16,"Explorer STM32F4");       
        LCD_ShowString(30,70+50+70,200,16,16,"PWM DAC TEST");       
        LCD_ShowString(30,90+50+70,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110+50+70,200,16,16,"2014/5/6");         
        LCD_ShowString(30,130+50+70,200,16,16,"WK_UP:+  KEY1:-");         
        POINT_COLOR=BLUE;//设置字体为蓝色               
        LCD_ShowString(30,150+50+70,200,16,16,"DAC VAL:");             
        LCD_ShowString(30,170+50+70,200,16,16,"DAC VOL:0.000V");             
        LCD_ShowString(30,190+50+70,200,16,16,"ADC VOL:0.000V");
        TIM_SetCompare2(TIM9,pwmval);        //初始值  
        while(pwmval<250)
        {
                        pwmval+=50;
                        TIM_SetCompare2(TIM9,pwmval);        //输出         
                        adcx=TIM_GetCapture2(TIM9);;
                        LCD_ShowxNum(94,150+120,adcx,3,16,0);             //显示DAC寄存器值
                        temp=(float)adcx*(3.3/256);;                              //得到DAC电压值
                        adcx=temp;
                        LCD_ShowxNum(94,170+120,temp,1,16,0);             //显示电压值整数部分
                        temp-=adcx;
                        temp*=1000;
                        LCD_ShowxNum(110,170+120,temp,3,16,0x80);         //显示电压值小数部分
                        adcx=Get_Adc_Average(ADC_Channel_5,20); //得到ADC转换值  
                        temp=(float)adcx*(3.3/4096);                              //得到ADC电压值
                        adcx=temp;
                        LCD_ShowxNum(94,190+120,temp,1,16,0);             //显示电压值整数部分
                        temp-=adcx;
                        temp*=1000;
                        LCD_ShowxNum(110,190+120,temp,3,16,0x80);         //显示电压值小数部分          
                        delay_ms(10);
        }
}[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

谢谢原子哥,已经结局了。还是程序逻辑问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2017-2-13
在线时间
110 小时
 楼主| 发表于 2017-2-28 11:54:43 | 显示全部楼层

谢谢原子哥,已经结局了。还是程序逻辑问题
回复

使用道具 举报

28

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2017-2-13
在线时间
110 小时
 楼主| 发表于 2017-2-28 13:32:19 | 显示全部楼层
就是上位机发送数据和DAC输出只能有一个工作,加入上位机先发送数据可以接收正常,这时DAC value值为50后,上位机发送来的数据就不能接收了。
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2017-2-28
在线时间
5 小时
发表于 2017-2-28 13:39:58 | 显示全部楼层
帮顶帮顶帮顶帮顶帮顶帮顶
回复

使用道具 举报

28

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
437
金钱
437
注册时间
2017-2-13
在线时间
110 小时
 楼主| 发表于 2017-2-28 14:10:35 | 显示全部楼层
wfwwfw 发表于 2017-2-28 13:39
帮顶帮顶帮顶帮顶帮顶帮顶

谢谢了,我现在换一种思路了,
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-2-28 22:12:22 | 显示全部楼层
爱奔跑的IT 发表于 2017-2-28 13:32
就是上位机发送数据和DAC输出只能有一个工作,加入上位机先发送数据可以接收正常,这时DAC value值为50后, ...

仿真找找问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 08:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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