1、线性呼吸灯
bsp.c
#include void RCC_Configuration(void); /* 初始化系统时钟 */ void TIM3_Configuration(void); /* PWM配置 */ void BSP_Init (void) { RCC_Configuration(); /* 初始化系统时钟 */ TIM3_Configuration(); /* PWM配置 */ } /********************************************************************************************************* * 名 称 :RCC_Configuration * 功能描述 : 初始化系统时钟 * 输入参数 : none * 返回参数 : none. * 作 者 : * 修 改 :(日期、修改人名、修改原因) * 特殊说明 : (特殊功能说明,例如:有参数检查等) *********************************************************************************************************/ void RCC_Configuration(void) { SystemInit(); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE); } /********************************************************************************************************* * 名 称 :TIM3_Configuration * 功能描述 : 初始化定时器 PWM * 输入参数 : none * 返回参数 : none. * 作 者 : * 修 改 :(日期、修改人名、修改原因) * 特殊说明 : (特殊功能说明,例如:有参数检查等) *********************************************************************************************************/ void TIM3_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //通道1 PA7 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //通道2 PA6 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //通道3 PB0 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //通道4 PB1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = (100- 1); //arr 设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler = (40-1); //分频 psc 影响周期 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割,一般写0 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置为向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* PWM1 Mode configuration: Channel1*/ TIM_OCInitStructure.TIM_Pulse =0; // 初始值 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //pwm模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能通道 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高电平 //通道1 TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 //通道2 TIM_OC2Init(TIM3, &TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 //通道3 TIM_OC3Init(TIM3, &TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 //通道4 TIM_OC4Init(TIM3, &TIM_OCInitStructure); TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 TIM_Cmd(TIM3, ENABLE); /* 使能 */ } main.c #include #include extern void BSP_Init (void); /********************************************************************************************************* * 名 称 :main * 功能描述 : 初始化STM32 * 输入参数 : none * 返回参数 : none. * 作 者 : * 修 改 :(日期、修改人名、修改原因) * 特殊说明 : (特殊功能说明,例如:有参数检查等) *********************************************************************************************************/ int main(void) { int n1,n2,n3,n4; int i; n1=100; n2=100; n3=100; n4=100; BSP_Init(); while(1) { for(i=0;i<100;i++) { TIM_SetCompare1(TIM3,i); TIM_SetCompare2(TIM3,i); TIM_SetCompare3(TIM3,i); TIM_SetCompare4(TIM3,i); delay_ms(19); } for(i=100;i>=0;i--) { TIM_SetCompare1(TIM3,i); TIM_SetCompare2(TIM3,i); TIM_SetCompare3(TIM3,i); TIM_SetCompare4(TIM3,i); delay_ms(19); } delay_ms(300); } } 2、正弦函数呼吸灯 bsp.c #include void RCC_Configuration(void); /* 初始化系统时钟 */ void TIM3_Configuration(void); /* PWM配置 */ void BSP_Init (void) { RCC_Configuration(); /* 初始化系统时钟 */ TIM3_Configuration(); /* PWM配置 */ } /********************************************************************************************************* * 名 称 :RCC_Configuration * 功能描述 : 初始化系统时钟 * 输入参数 : none * 返回参数 : none. * 作 者 : * 修 改 :(日期、修改人名、修改原因) * 特殊说明 : (特殊功能说明,例如:有参数检查等) *********************************************************************************************************/ void RCC_Configuration(void) { SystemInit(); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE); } /********************************************************************************************************* * 名 称 :TIM3_Configuration * 功能描述 : 初始化定时器 PWM * 输入参数 : none * 返回参数 : none. * 作 者 : * 修 改 :(日期、修改人名、修改原因) * 特殊说明 : (特殊功能说明,例如:有参数检查等) *********************************************************************************************************/ void TIM3_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //通道1 PA7 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //通道2 PA6 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //通道3 PB0 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //通道4 PB1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = (100- 1); //arr 设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler = (40-1); //分频 psc 影响周期 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割,一般写0 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置为向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* PWM1 Mode configuration: Channel1*/ TIM_OCInitStructure.TIM_Pulse =0; // 初始值 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //pwm模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能通道 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高电平 //通道1 TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 //通道2 TIM_OC2Init(TIM3, &TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 //通道3 TIM_OC3Init(TIM3, &TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 //通道4 TIM_OC4Init(TIM3, &TIM_OCInitStructure); TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR3上的预装载寄存器 TIM_Cmd(TIM3, ENABLE); /* 使能 */ } main.c #include #include #include extern void BSP_Init (void); /********************************************************************************************************* * 名 称 :main * 功能描述 : 初始化STM32 * 输入参数 : none * 返回参数 : none. * 作 者 : * 修 改 :(日期、修改人名、修改原因) * 特殊说明 : (特殊功能说明,例如:有参数检查等) *********************************************************************************************************/ int main(void) { int n1,n2,n3,n4; int i; n1=100; n2=100; n3=100; n4=100; BSP_Init(); while(1) { for(i=0;i<314;i++) { TIM_SetCompare1(TIM3,100*sin(i/100.0)); TIM_SetCompare2(TIM3,100*sin(i/100.0)); TIM_SetCompare3(TIM3,100*sin(i/100.0)); TIM_SetCompare4(TIM3,100*sin(i/100.0)); delay_ms(10); } for(i=314;i>=0;i--) { TIM_SetCompare1(TIM3,100*sin(i/100.0)); TIM_SetCompare2(TIM3,100*sin(i/100.0)); TIM_SetCompare3(TIM3,100*sin(i/100.0)); TIM_SetCompare4(TIM3,100*sin(i/100.0));
上一篇:stm32 pwm波 输出的对应通道
下一篇:stm32之定时器运用———呼吸灯
推荐阅读最新更新时间:2024-11-23 12:15
推荐帖子
- MSP430FR2433外设参考驱动代码
- MSP430FR2433外设参考驱动代码是外设参考驱动的测试代码
- 江长活 微控制器 MCU
- ESP8266wifi模块AT指令测试显示可以接收信号但是不能返回信息怎么回事
- 如题ESP8266wifi模块AT指令测试显示可以接收信号但是不能返回信息怎么回事首先确认波特率对不对,引脚上下拉对不对。我记得以前用着模块也不行,好像刷了下固件就可以了主要保证你的硬件保证没有问题,切记,ESP8266工作时峰值电流五百多ma1,上电电流要保证。几百MA。(刚上电一下)如故正确,板子没问题灯会闪几下。2,TX,RX要接正确。保证串口正常。3,先要敲AT这个命令。后面就可以敲AT+。。。注意AT指令都要带回车的。
- zhangchenhui 瑞萨电子MCU
- 鉴别真代理、假代理的方法
- 看它的业务介绍,如果说同时代理几家相互竞争的产品的,肯定是假的。如网上说什么代理EMC,SONIX,十速等等的,100%是假的。鉴别真代理、假代理的方法真?假?真真假假???待试
- gina 单片机
- 电源变压器
- 请问这种普通电源变压器,带负载时表面温度一般控制在多少摄氏度℃比较合适?网上购买这种电源变压器,都说足功率足功率,不知道有什么方法来判断变压器是否真的足功率呢?电源变压器“这种普通电源变压器,带负载时表面温度一般控制在多少摄氏度℃比较合适?”粗略判断,你的手可以较长时间(例如半分钟到一分钟)按在变压器铁芯表面。功率够不够的判断依据是在温升有限(如楼上maychang说的那样,手可以勉强耐受)的前提下,输出电压幅值和空载比下降不多,满足标称。另一个检验办法是反着来,按标称给负载,至少
- wswddwsw 电源技术
- 脉宽调制(PWM)的基本原理及其应用实例(转)
- 本帖最后由paulhyde于2014-9-1509:30编辑关键字:PWMPIC16C67制动器DSP微控制器脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。模拟电路模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。9V电池就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。与此类似,从电池吸收的电流也不限定
- 马子007 电子竞赛
- 驱动钛丝(SMA)的可靠性设计(2) 不同厂家生产的钛丝有什么区别
- 前言形状记忆合金(Shapememoryalloy,SMA),也叫形态记忆合金、镍钛记忆合金,它是由TI(钛)-IN(镍)材料组成,这里我们方便描述,简称钛丝或者驱动钛丝。第2节不同厂家生产的钛丝有什么区别目前全球的钛丝生产厂家,同样规格的钛丝特性都不同,选择合适自己产品的钛丝至关重要,我们需要检测和验证不同厂家的钛丝,能否满足自己产品的需求。下面我们从3个维度简单地讲一讲。1、先说下驱动钛丝的温度指标,分别是相变温度、相变温度偏差值、环境适应温度。
- 272151979 综合技术交流
设计资源 培训 开发板 精华推荐
- LTC3631EDD 高效 5V 稳压器的典型应用电路
- 超低噪声正弦波驱动转换器(5V 至 15V)
- LT8607EMSE 5V、2MHz 降压稳压器的典型应用电路
- LTC7813EUH 低 EMI、宽输入范围直通级联升压+降压稳压器的典型应用电路
- RT809H编程器的ISP小板
- DK-START-4CGX15NES,Cyclone IV GX 收发器入门板为低功耗开发和原型设计提供了一个硬件平台
- 使用 Richtek Technology Corporation 的 RT9986A 的参考设计
- LTC3803HS6-3 用于 2W 隔离式家政电信转换器的恒频电流模式反激式 DC/DC 控制器的典型应用电路
- 【涂鸦智能】墨水屏多功能温湿度计
- LTC1515-3.3/5,具有上电复位功能的可编程 5V/3V 电源
- Follow me第二季第1期来啦!与得捷一起解锁【Adafruit Circuit Playground Express】超能力!
- 是德科技第二届示波器感恩月之买一送一
- 英飞凌开发板618大促:爆款清单揭秘,有好礼!
- 有奖直播:如何利用瑞萨电子的GreenPAK™平台优化混合信号电路设计
- Mouser 福利活动:邀请新用户下单,各得百元奖励!
- “TI 中国大学计划” 知多少——答题赢好礼!
- [年末调查]工程师年末大盘点,你被点名了!
- 英飞凌MERUS™ D类音频解决方案|【阅读赢好礼,下单送开发板】
- Hercules DIY创意大搜集!比比看,谁的设计最“安全”?
- 给你一个SEED-DIM3517 ,你可以DIY啥?