本帖最后由 瞌睡大虫 于 2017-4-18 15:32 编辑 我用的是stm8l152c6 下面是我的pwm 信号 求解答 如何实现呼吸灯 #include"iostm8l152c6.h" #include"stdint.h" //这个头文件定义了数据类型,可以使用uint8_t,uint16_t void DelayMS(unsigned int ms) { uint8_t i; while(ms != 0) { for(i=0;i<250;i++); for(i=0;i<75;i++); ms--; } } /**************************************************************************************** * 名 称:void TIMER1_Init(void) * 功 能:stm8定时器初始化 * 入口参数:无 * 出口参数:无 * 说 明:通道1输出pwm波 * 范 例:无 ****************************************************************************************/ void TIMER1_Init(void) { //对于stm8l,默认时钟源是关闭的,需要先打开,才能配置寄存器 CLK_PCKENR2_PCKEN21=1;//打开定时器1时钟 TIM1_CCMR1_OC1M=0x06;//0b110 PWM模式1 TIM1_CCER1_CC1P=0;//高电平有效 TIM1_CCER1_CC1E=1;//OC1信号输出到对应引脚,PD2为OC1输出引脚 //禁用预装载寄存器,TIM1CCR can be wiriten at any time TIM1_CCMR1_OC1PE=0; TIM1_CR1_CMS=0;//计数器计数方向取决于TIM1_CR1_DIR TIM1_CR1_DIR=0;//counter used as up-counter //初始化刹车寄存器中的MOE,只有设置此位才能使TIM1的OC1输出pwm TIM1_BKR_MOE=1; TIM1_PSCRH = 0;// Set the Prescaler value TIM1_PSCRL = 0;// Set the Prescaler value TIM1_ARRH = 0;// 初始化自动装载寄存器,决定PWM 方波的频率 TIM1_ARRL = 256;// 初始化自动装载寄存器,决定PWM 方波的频率 TIM1_CCR1H=0; TIM1_CCR1L=0; TIM1_CR1_CEN=1;//开启计数器 } int main( void ) { uint8_t i; //CLK_CKDIVR寄存器默认0x03分频值为8,所以主频默认为16M/8=2M //PD2引脚输出PWM波 PD_DDR_DDR2 =1;//设置为输出 PD_CR1_C12 =1;//推挽输出 TIMER1_Init(); while(1) { // 下面的循环将占空比逐渐从0 递增到50% for(i=0;i<128;i++) { TIM1_CCR1H = 0; TIM1_CCR1L = i; DelayMS(5); } // 下面的循环将占空比逐渐从50%递减到0 for(i=128;i>0;i--) { TIM1_CCR1H = 0; TIM1_CCR1L = i; DelayMS(5); } } } |
信号输出的是PD2 我的led端口是 PC7 和PE7
我下面该怎么做
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
https://www.stmcu.org.cn/module/forum/thread-608168-1-1.html
评分
查看全部评分
评分
查看全部评分