你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8-2路ADC控制2个LED灯PWM调光问题?

[复制链接]
zhangli-li 提问时间:2017-11-16 21:24 /
学习用stm8做个2路ADC电位器调节2个LED灯pwm调光的程序,屏蔽程序里任何一路ADC另一路是可以调节LED光的,2路一起用就不能正常调光了,请兄弟们帮忙看看是哪里出了问题呢?谢谢
/*2个电位器分别PWM调节2个LED*/

#include<iostm8s103f3.h>

unsigned char x;
unsigned int ADCData;
unsigned int PWM1;
unsigned int PWM2;
void PORTInit()             //PWM输出端口设置
{
  PC_DDR_bit.DDR3 = 1;      //set out
  PC_CR1_bit.C13 = 1;       //推挽输出
  PC_CR2_bit.C23 = 0;       //输出速度

  PD_DDR_bit.DDR2 = 1;      //set out
  PD_CR1_bit.C12 = 1;       //PD_CR1 |= 0x0d;
  PD_CR2_bit.C22 = 0;
}

/*******************************************************************************
**函数名称:void TIM1_PWM_Init()
**功能描述:定时器1 PWM初始化
**入口参数:无
**输出:无
*******************************************************************************/
void TIM1_PWM_Init()
{
  TIM1_CR1_bit.CEN = 0;       //停止计数
  TIM1_BKR_bit.MOE = 1;  
  TIM1_CCMR3_bit.OC3M = 7;    //PWM2 MODEL
  TIM1_CCMR3_bit.OC3PE = 1;
  TIM1_CCER2_bit.CC3E = 1;    //output enable
  TIM1_CCER2_bit.CC3P = 1;    //OC1 hi  
  TIM1_PSCRH =  0x00;         //16MHZ/
  TIM1_PSCRL =  0x00;   
  TIM1_ARRH =  1000 / 256;     
  TIM1_ARRL =  1000 % 256;
  TIM1_CCR3H = 0x00;            //50%
  TIM1_CCR3L  = 0x00;
  TIM1_CR1 = 0x01;
}

/*******************************************************************************
**函数名称:void TIM2_PWM_Init()
**功能描述:定时器2PWM初始化
**入口参数:无
**输出:无
*******************************************************************************/
void TIM2_PWM_Init()
{
  TIM2_CR1_bit.CEN = 0;       //禁能定时器2
  TIM2_CCMR3_bit.OC3M = 7;    //定时器通道3 PWM模式 PWM2 MODEL
  TIM2_CCMR3_bit.OC3PE = 1;   //输出比1预装载使能
  TIM2_CCER2_bit.CC3E = 1;    //定时器2通道3设置为输出
  TIM2_CCER2_bit.CC3P = 1;    //定时器2通道3为低电平为有效电平
  TIM2_PSCR_bit.PSC = 0;     //设置预分频
  TIM2_ARRH =  1000 / 256;   
  TIM2_ARRL =  1000 % 256;
  TIM2_CCR3H = 0x00;          //50%
  TIM2_CCR3L  = 0x00;
  TIM2_CR1 = 0x01;
}

/*******************************************************************************
**函数名称:void ADC_Init()
**功能描述:初始化ADC
**入口参数:无
**输出:无
*******************************************************************************/
void ADC_Init()
{
  PC_DDR_bit.DDR4 = 0;   //设置PC->4 为输入
  PC_CR1_bit.C14 = 0;    //设置为悬空输入
  PC_CR2_bit.C24 = 0;    //设置中断禁止

  PD_DDR_bit.DDR3 = 0;   //设置PD->3 为输入
  PD_CR1_bit.C13 = 0;    //设置为悬空输入
  PD_CR2_bit.C23 = 0;    //设置中断禁止

  ADC_CR1_bit.SPSEL = 1;    //fmaster / 3 = 16MHZ / 3 = 5.333MHZ
  ADC_CR2_bit.ALIGN = 1;    //RIGHT ALIGN
  ADC_CR1_bit.ADON = 1;     //启动ADC
}

/*******************************************************************************
**函数名称:void ADC_Data_Read(unsigned int *AD_Value)
**功能描述:读取ADC完成一次模数转换结果
**入口参数:unsigned int *AD_Value
            *AD_Value ->读取ADC采样数据的指针
**输出:无
*******************************************************************************/
void ADC_Data_Read(unsigned int *AD_Value)
{
  ADC_CSR_bit.CH = x;       //选择通道
  ADC_CR1_bit.ADON = 1;       //启动ADC
  while(ADC_CSR_bit.EOC == 0);  //等待转换结束
  *AD_Value = ADC_DRH;          //先读取高8位
  *AD_Value = (unsigned int)((*AD_Value << 8) + ADC_DRL);   //高8位与低8位相加,凑成16位数据
}

/*    主函数    */
int main(void)
{
  CLK_CKDIVR = 0x00;      //CPUDIV = 1 HSIDIV = 1  内部时钟 = 16Mhz
  PORTInit();
  TIM1_PWM_Init();
  TIM2_PWM_Init();
  ADC_Init();             //调用ADC初始化函数
  while(1)
  {
      x = 2;
      ADC_Data_Read(&ADCData);              //读取ADC的采样数值
      PWM1=ADCData;
      TIM1_CCR3H = PWM1 / 256;        
      TIM1_CCR3L  = PWM1 % 256;

      x = 4;
      ADC_Data_Read(&ADCData);              //读取ADC的采样数值
      PWM2=ADCData;
      TIM2_CCR3H = PWM2 / 256;        
      TIM2_CCR3L  = PWM2 % 256;
  }
}

收藏 评论4 发布时间:2017-11-16 21:24

举报

4个回答
zhux 回答时间:2017-12-22 12:27:15
想通过一个脚的ADC值达到一定值 就控制一个LED灯亮怎么写程序,小白一个,还请指导。谢谢各位!

点评

有什么问题可以单独发帖求助~  发表于 2018-3-31 14:32
zhux 回答时间:2017-12-22 12:32:34
是用STM32F103C8T6 的芯片
荒废0 回答时间:2018-4-16 21:23:46
看看

评分

参与人数 1ST金币 -1 收起 理由
zero99 -1 求助帖禁止灌水

查看全部评分

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版