STM8四路PWM配置

发布者:TranquilDreams最新更新时间:2018-06-18 来源: eefocus关键字:STM8  PWM配置 手机看文章 扫描二维码
随时随地手机看文章

void pwm_color_init(void) 

//    uint16 v;

volatile uint8 c; 


/*datasheet 44,opt2 Port C5 alternate function = TIM2_CH1; port C6

 alternate function = TIM1_CH1; port C7 alternate function = TIM1_CH2.*/

/*

v = FLASH_ReadOptionByte(0x4803);

c =(uint8)( v >> 8);

if(0 == (0x01 & c))

{

c  |= 1;

FLASH_Unlock(FLASH_MEMTYPE_DATA);

FLASH_ProgramOptionByte(0x4803, c);

FLASH_Lock(FLASH_MEMTYPE_DATA);

}

*/




GPIO_Init(GPIOC, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_SLOW); 

GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_SLOW); 

GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_SLOW); 

GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_SLOW);//bin添加


c = PWRON_PSR; 


TIM1_DeInit(); 


TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, TIM_CLK_FREQUENCY / PWM_BULK_CLK, 0); 


/* PWM mode 2 - In up-counting, channel 1 is inactive as long as TIM1_CNT < TIM1_CCR1, 

otherwise, the channel is active. */

/* NOTE chn1 is used pwm2 mode , so the current will be more average!!*/

TIM1_OC4Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, 

 (TIM_CLK_FREQUENCY / PWM_BULK_CLK / 100) * (100 - c), 

TIM1_OCNPOLARITY_LOW, TIM1_OCIDLESTATE_RESET); //bin添加

TIM1_OC3Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, 

 (TIM_CLK_FREQUENCY / PWM_BULK_CLK / 100) * (100 - c), 

 TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_LOW, 

 TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_RESET); 

TIM1_OC2Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, 

 (TIM_CLK_FREQUENCY / PWM_BULK_CLK / 100) * c, 

 TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_LOW, 

 TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_RESET); 

TIM1_OC1Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, 

 (TIM_CLK_FREQUENCY / PWM_BULK_CLK / 100) * c, 

 TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_LOW, 

 TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_RESET); 


/* TIM1 counter enable */

TIM1_Cmd(ENABLE); 


/* TIM1 Main Output Enable */

TIM1_CtrlPWMOutputs(ENABLE);

}

 

修改stm8s_time.c

#if 0

void TIM1_OC4Init(TIM1_OCMode_TypeDef TIM1_OCMode,

                  TIM1_OutputState_TypeDef TIM1_OutputState,

                  uint16_t TIM1_Pulse,

                  TIM1_OCPolarity_TypeDef TIM1_OCPolarity,

                  TIM1_OCIdleState_TypeDef TIM1_OCIdleState)

{

    /* Check the parameters */

    assert_param(IS_TIM1_OC_MODE_OK(TIM1_OCMode));

    assert_param(IS_TIM1_OUTPUT_STATE_OK(TIM1_OutputState));

    assert_param(IS_TIM1_OC_POLARITY_OK(TIM1_OCPolarity));

    assert_param(IS_TIM1_OCIDLE_STATE_OK(TIM1_OCIdleState));

 

    /* Disable the Channel 4: Reset the CCE Bit */

    TIM1->CCER2 &= (uint8_t)(~(TIM1_CCER2_CC4E | TIM1_CCER2_CC4P));

    /* Set the Output State  &  the Output Polarity */

    TIM1->CCER2 |= (uint8_t)((uint8_t)(TIM1_OutputState & TIM1_CCER2_CC4E ) |  

                             (uint8_t)(TIM1_OCPolarity  & TIM1_CCER2_CC4P ));

 

    /* Reset the Output Compare Bit  and Set the Output Compare Mode */

    TIM1->CCMR4 = (uint8_t)((uint8_t)(TIM1->CCMR4 & (uint8_t)(~TIM1_CCMR_OCM)) | 

                            TIM1_OCMode);

 

    /* Set the Output Idle state */

    if (TIM1_OCIdleState != TIM1_OCIDLESTATE_RESET)

    {

        TIM1->OISR |= (uint8_t)(~TIM1_CCER2_CC4P);

    }

    else

    {

        TIM1->OISR &= (uint8_t)(~TIM1_OISR_OIS4);

    }

 

    /* Set the Pulse value */

    TIM1->CCR4H = (uint8_t)(TIM1_Pulse >> 8);

    TIM1->CCR4L = (uint8_t)(TIM1_Pulse);

 

}

#endif

 

void pwm_color_adjust(uint8 chn, uint8 prescaler)

{

    if (prescaler > 100) prescaler = 100;

    TIM1_Cmd(DISABLE);

 

    if( 0x01 == chn)

    {//red

TIM1_SetCompare3(TIM_CLK_FREQUENCY / PWM_BULK_CLK / 100 * (100 - prescaler));

    }

    else

    if( 0x02 == chn)

    {//green

        TIM1_SetCompare2(TIM_CLK_FREQUENCY / PWM_BULK_CLK / 100 * prescaler);

    }

    else

    if( 0x03 == chn)

    {//blue

        TIM1_SetCompare1(TIM_CLK_FREQUENCY / PWM_BULK_CLK / 100 * prescaler);

    }

    else

    if( 0x04 == chn)//bin添加

    {

        TIM1_SetCompare4(TIM_CLK_FREQUENCY / PWM_BULK_CLK / 100 * prescaler);

    }


    TIM1_Cmd(ENABLE);

 

    TIM1_CtrlPWMOutputs(ENABLE);

}

 

 

Stm8s_time1.c

#if 0

void TIM1_SetCompare4(u16 Compare4)

{

    /* Set the Capture Compare4 Register value */

    TIM1->CCR4H = (u8)(Compare4 >> 8);

    TIM1->CCR4L = (u8)(Compare4);

}

#endif    


关键字:STM8  PWM配置 引用地址:STM8四路PWM配置

上一篇:STM8全局变量溢出问题解决
下一篇:单片机PWM舵机控制原理

推荐阅读最新更新时间:2024-03-16 16:05

STM8+STVD+COSMIC 学习笔记 address is out of range and is ignored
在连续整了一个下午,一个晚上,又一个上午之后终于可以用STVD调试了!以此来纪念一下。 单片机时STM8AF5189,工程是人家编译好的,结果拿到手里编译后发现s19文件变大了不少,而且里面的地址出现了一些0x0000开始的地址,正常情况下应该是从0x8080开始才对,最开始的感觉就是编译器配置问题,在改了若干项配置,包括优化等等,还是不能仿真,debug时提示swim communication error,在排除了硬件问题之后,感觉是软件问题。经历了长时间折腾后打算用IAR,结果换用IAR问题又是一大堆。无奈又回头折腾STVD,偶然的发现,可能是c编译器的问题,也就是COSMIC的问题,当时用的是从网上下的一个,没注意有代
[单片机]
STM8+STVD+COSMIC 学习笔记 address is out of range and is ignored
基于STM8及UHF RF收发器SX1231的无线射频收发系统设计
2008年中国政府为微功率(短距离)无线电应用增加了868MHz~ 868.6MHz的工作频率。其对无线电设备的射频要求如下: (1)发射功率限值:5mW(e.r.p); (2)发射信号的占空比限值:1%; (3) 载波 频率容限:100×10-6; 并把该类设备归类于“各类民用设备的无线电控制装置中。 从上面的规定中可以看到,该频段可用带宽为600kHz,但并没有明确在该频道使用的带宽,数据速率以及调制方式方面要求,这就给予了应用很大的空间。本文主要是基于868MHz频段的要求,设计了比较简单通用的无线收发系统,该系统可适用于该频段的不同的无线传输应用。 SX1231介绍及性能描述 SX1231芯片是Semtec
[单片机]
基于<font color='red'>STM8</font>及UHF RF收发器SX1231的无线射频收发系统设计
基于STM8的车载抬头显示器设计
随着电子技术与计算机技术在汽车电子中的应用越来越多,传统的机械式仪表已经逐步被电子仪表所代替。电子仪表有体积小、重量轻等优点,可以有效地节约车内有限的空间。其以数字、文字或图形方式显示汽车信息时,显示直观、信息量大,可以根据不同需要修改不同的显示内容。 抬头显示器 HUD是英文Head Up Display的缩写,意为“抬头显示”或“平视显示器”。最初的应用就是在战斗机上,是由电子组件、显示组件、控制器以及高压电源等组成的综合电子显示设备,能将飞行参数、瞄准攻击、自检测等信息,以图像、字符的形式,通过光学部件投射到座舱正前方组合玻璃上的显示装置。由于使司机不必低头察看仪表盘,HUD可以大大缩短司机的读表时间。与传统的仪表板相比,
[单片机]
基于<font color='red'>STM8</font>的车载抬头显示器设计
基于STM8的DHT11温湿度传感器的驱动代码设计
最近希望恢复性学习一下STM8的相关知识,于是我选择了从头开始写温湿度传感器DHT11驱动代码的方式。其中遇到一些问题,也有一些收获,希望会帮助到遇到类似问题的朋友,也希望不足之处得到大家的指导 首先介绍一下DHT11的必要知识 一 复位时序 以及 数据时序 下面是数据时序 此外,根据数据手册得知,一次通信需要的时间是3毫秒左右,这很重要,在后面的BUG分析环节会说到 二 贴上关键代码以及分析 //复位DHT11 void DHT11_RST() { TIM4_CR1 = 0x00; //关闭定时器 TIM4_CNTR = 0; //保证下次的第一
[单片机]
基于<font color='red'>STM8</font>的DHT11温湿度传感器的驱动代码设计
STM8 端口 PWM(TIM2_CH3)复用功能开启
单片机型号 STM8S103F TSSOP 20脚 void Write_Option_Byte(void) { /*解锁Flash*/ do { FLASH- DUKR = 0xAE; FLASH- DUKR = 0x56; } while(!(FLASH- IAPSR & 0X08)); /*对选项字节进行写操作使能*/ FLASH- CR2 = 0X80; /*互补控制寄存器*/ FLASH- NCR2 = 0X7F; /*写操作,0x02:PD2*/ *((unsigned char *)0x4803) = 0x02; *((unsig
[单片机]
<font color='red'>STM8</font> 端口 <font color='red'>PWM</font>(TIM2_CH3)复用功能开启
基于STM8的车载抬头显示器设计
随着电子技术与计算机技术在汽车电子中的应用越来越多,传统的机械式仪表已经逐步被电子仪表所代替。电子仪表有体积小、重量轻等优点,可以有效地节约车内有限的空间。其以数字、文字或图形方式显示汽车信息时,显示直观、信息量大,可以根据不同需要修改不同的显示内容。 抬头显示器 HUD是英文Head Up Display的缩写,意为“抬头显示”或“平视显示器”。最初的应用就是在战斗机上,是由电子组件、显示组件、控制器以及高压电源等组成的综合电子显示设备,能将飞行参数、瞄准攻击、自检测等信息,以图像、字符的形式,通过光学部件投射到座舱正前方组合玻璃上的显示装置。由于使司机不必低头察看仪表盘,HUD可以大大缩短司机的读表时间。与传统的仪表板相比
[嵌入式]
STM8在IAR创建工程后编译时出现Error[Li005]
STM8L在IAR中创建工程后,因为是新手,创建工程后编译出现以下错误: Error : no definition for GPIO_Init 原因是库文件添加不全,因只是用USART、I2C等功能,其余的库文件因不熟悉环境漏掉了关联的库文件导致编译错误。 如不太熟悉库文件,建议全部加载上。
[单片机]
STM8之外部中断长按键识别相关内容
  STM8常用中断指令   开总中断   _asm(“rim”);   禁止中断   _asm(“sim”);   进入停机模式   _asm(“halt”);   中断返回   _asm(“iret”);   等待中断   _asm(“wfi”);   软件中断   _asm(“trap”);   STM8S常用中断映射   如使用中断函数时,可以通过在上图中查找相对应的中断向量号,而中断函数的名字可以自定义   外部中断长按键识别相关配置   ??STM8S为外部中断事件专门分配了五个中断向量:   PortA 口的5个引脚:PA[6:2]   PortB 口的8个引脚:PB[7:0]   PortC 口的8
[单片机]
<font color='red'>STM8</font>之外部中断长按键识别相关内容
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved