
学习用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; } } |
STM8S003无法检测到引脚电平
STM8 @svlreg 问题
STM8AF62XX+L99PM62GXP LIN通讯的电路原理图有吗?官网提供了一套软件,没找到对应的原理图,请大家指教一下
求一个STM8S207例程
初次接触STM8,请问在STVD中,为什么这个Struct会报错
STMS005K6T6 如何采集内部参考电压。
stm8s003 adc中断和通道切换的问题
adc施密特触发器stm8
stm8l051f3 TSSOP20 封装,待机模式下,2天后,电流突然增加到140UA
STM8S用STVP烧录怎么加密?
点评
评分
查看全部评分