历史上的今天
今天是:2024年09月27日(星期五)
2021年09月27日 | 基于STM32F103 PWM呼吸灯设计
2021-09-27 来源:eefocus
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));
史海拾趣
|
这是从网上找到的MC9S08JM60单片机USB部分的翻译,该单片机是飞思卡尔推出的集成USB的S08单片机,对于需要实现USB连接的项目来说,是不错的选择。翻译的不是很好,有的地方还是要参考英文手册 … 查看全部问答> |
|
今天重新温习了51单片机扩展RAM、ROM,收获大大的有,以前把51的一本书看了几遍,还是没有弄清楚,没有弄清楚51访问外部ram、rom的时序,到今天才发现,访问外部ram、rom的时序是有访问指令决定的。 当用并行方式 ...… 查看全部问答> |
|
vc 添加程序的快捷方式到启动菜单里[转载http://blog.sina.com.cn/s/blog_5fd6e7ac01 vc 添加程序的快捷方式到启动菜单里#include <io.h>HRESULT CCreatescDlg::CreateLink(LPCSTR lpszPathObj, LPCSTR lpszPathLink, LPCSTR lpszDesc){ HRESULT hres; IShellLink* psl; h ...… 查看全部问答> |
|
window ce 系统下怎么访问 pc机上的oracle数据库! window ce 系统下怎么访问 pc机上的oracle数据库!我用的是vs2008,poketpc是windows mobile 5.0,不知那位高人能给解决。… 查看全部问答> |
|
请教关于奇晶的2.83寸OLED显示屏:C0283QGLC-T(采用的是S6E63D6驱动IC)的驱动问题----有人做过么? 原来用的三星的LMS283显示屏,最近停产了,不得不从新找屏做驱动。 新找来的奇晶的LCD,修改了硬件电路和spi初始化配置,点亮-进入系统都没有问题,但是象素上 发现了一个奇怪的问题: 颜色显示都基本正确,红.绿.蓝都还可以。 ...… 查看全部问答> |
|
我实验室现在想搞支持802.11系列的手机终端,我对这个完全不了解,想先学习一下..谁有802.11系列协议的实现代码的可以共享一下吗 ,兄弟不胜感激!!!… 查看全部问答> |
|
求救,各位达人,WinCE6.0如何加载位于BinFS文件系统中类型为NandImage的.bin文件中的内容? 我现在做的是BinFS+Multi-bin,目的是加快WINCE6.0的启动速度,减小内存使用。核心的东西都放在XIPKERNEL.bin中,为RAMIMAGE,而其他东西则放在nk.bin中,为NANDIMAGE。现在的现象是,xipkernel里面的东西好像加载都是正常的,但是nk.bin中的内容一 ...… 查看全部问答> |




