OpenEdv-开源电子网

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

mini板ADC采集和PWM输出怎样同时进行,我把两个历程组合后PWM没有输出,为什么?

[复制链接]

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-7-14
在线时间
28 小时
发表于 2016-7-15 15:44:14 | 显示全部楼层 |阅读模式
1金钱
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "adc.h"
#include "pwm.h"
int main(void)
{
        u16 adcx;
         u16 led0pwmval=0;   
        u8 dir=1;
        float temp;
        delay_init();                     //延时函数初始化          
        uart_init(9600);                 //串口初始化为9600
        LED_Init();                                  //初始化与LED连接的硬件接口
        LCD_Init();
        Adc_Init();               
   TIM1_PWM_Init(899,0);         //ADC初始化            
        POINT_COLOR=RED;//设置字体为红色
        LCD_ShowString(60,50,200,16,16,"Mini STM32");       
        LCD_ShowString(60,70,200,16,16,"ADC TEST");       
        LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(60,110,200,16,16,"2014/3/9");       
        //显示提示信息
        POINT_COLOR=BLUE;//设置字体为蓝色
        LCD_ShowString(60,130,200,16,16,"ADC_CH1_VAL:");             
        LCD_ShowString(60,150,200,16,16,"ADC_CH1_VOL:0.000V");            
        while(1)
        {
                delay_ms(10);         
                if(dir)led0pwmval++;
                else led0pwmval--;         
                if(led0pwmval>300)dir=0;
                if(led0pwmval==0)dir=1;                                                    
                TIM_SetCompare1(TIM1,led0pwmval);
               if(ed0pwmval==0|led0pwmval==300)       
                {
                 adcx=Get_Adc_Average(ADC_Channel_1,10);
                LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
                temp=(float)adcx*(3.3/4096);
                adcx=temp;
                LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
                temp-=adcx;
                temp*=1000;
                LCD_ShowxNum(172,150,temp,3,16,0X80);
               }               
        }                                                                                            
}       


最佳答案

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

感谢!答主! 加到前面确实可以产生呼吸灯效果,但是为什么LCD有显示后,呼吸灯经过一次亮灭的频率变得非常低,比如下面两个函数: while(1) { delay_ms(5); if(dir)led0pwmval+=1; else led0pwmval-=1; if(led0pwmval>300)dir=0; if(led0pwmval==0)dir=1; ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-7-14
在线时间
28 小时
 楼主| 发表于 2016-7-15 15:44:15 | 显示全部楼层
本帖最后由 yukioooo 于 2016-7-19 16:37 编辑
zhangrupei 发表于 2016-7-15 20:58
初始化那边TIM1_PWM_Init放在LCD_Init前面试试

感谢!答主!
加到前面确实可以产生呼吸灯效果,但是为什么LCD有显示后,呼吸灯经过一次亮灭的频率变得非常低,比如下面两个函数:
while(1)
        {
                 delay_ms(5);         
                if(dir)led0pwmval+=1;
                else led0pwmval-=1;         
                 if(led0pwmval>300)dir=0;
                if(led0pwmval==0)dir=1;                                                   
                TIM_SetCompare1(TIM1,led0pwmval);
                LCD_ShowString(30,40,200,24,24,"Mini STM32 ^_^");        
                LCD_ShowString(30,70,200,24,24,"Mini STM32 ^_^");        
                }

while(1)
        {
                 delay_ms(5);         
                if(dir)led0pwmval+=1;
                else led0pwmval-=1;         
                 if(led0pwmval>300)dir=0;
                if(led0pwmval==0)dir=1;                                                   
                TIM_SetCompare1(TIM1,led0pwmval);
                }

加了显示之后,频率变得非常小,什么原因???求教。。。
回复

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-7-14
在线时间
28 小时
 楼主| 发表于 2016-7-15 19:22:56 | 显示全部楼层
回复

使用道具 举报

0

主题

35

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1593
金钱
1593
注册时间
2014-4-27
在线时间
241 小时
发表于 2016-7-15 20:58:01 | 显示全部楼层
初始化那边TIM1_PWM_Init放在LCD_Init前面试试
回复

使用道具 举报

0

主题

35

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1593
金钱
1593
注册时间
2014-4-27
在线时间
241 小时
发表于 2016-7-18 16:20:57 | 显示全部楼层
yukioooo 发表于 2016-7-15 23:37
感谢!答主!
加到前面确实可以产生呼吸灯效果,但是为什么LCD有显示后,呼吸灯经过一次亮灭的频率变得 ...

两个LCD_Show函数需要的时间比前面的if判断长很多的,那么TIM_SetCompare函数执行的频率就降低了,呼吸频率就降低了。
回复

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-7-14
在线时间
28 小时
 楼主| 发表于 2016-7-19 16:29:32 | 显示全部楼层
zhangrupei 发表于 2016-7-18 16:20
两个LCD_Show函数需要的时间比前面的if判断长很多的,那么TIM_SetCompare函数执行的频率就降低了,呼吸频 ...

非常感谢答主!
回复

使用道具 举报

0

主题

35

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1593
金钱
1593
注册时间
2014-4-27
在线时间
241 小时
发表于 2016-7-19 17:10:03 | 显示全部楼层

都一起学习
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 00:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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