鸽了有小半年,前段时间一直忙于项目上的事情,离职与找工作的一系列事情,目前工作已找到,稳定下来了,有更多的时间专注学习,继续提升自己。
工作三年硬件软件都做过,目前职业规划是深耕于嵌入式软件,兼顾学习嵌入式硬件,最后独立开发项目,目前个人水平自认为勉强算是个初级软硬件工程师吧,找工作时由于硬件软件都不精,只能拿个入门工资,现在找准一个深耕下去,目前十年规划是成为高级嵌入式软件工程师,工资十年月入2W目标,继续努力!
在新公司有半个月了,感觉各方面都不错,新公司负责的第一个项目是CO2传感器,使用芯片型号STM32F051K8U6,之前一直用的是F1和F4型号,突然换芯片不适应,努力看了1周的芯片手册已经没问题了,各个功能模块已经调通,只剩下求取气体浓度的算法需要研究,加油!
写这篇文章算是对之前的一个总结与之后的工作部署!
新芯片的程序与之前用过的有很大区别,写这篇文章给大家一个参考
TIM定时器
定时器的作用这里不再叙述,说一下使用TIM定时器延时与systick定时器延时的区别:
定时器延时:打个比方,你正在烧水,突然手机铃声响了,你可以立即去接电话,等水烧开了在回来,这样的延时烧水和接电话两个都不耽误,可以同时进行
systick延时:你正在烧水,突然手机铃声响了,此时按照程序设定,你必须等水烧开了才能去接听电话,烧水和接听电话只能有一个在进行,不能同时执行
所以TIM延时要优于systick延时
TIM配置主要有NVIC配置和模式配置,模式配置要使能中断,最后在TIM3_IRQHandler中断函数

void  TIM_NVIC_Config(void)
{NVIC_InitTypeDef  NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPriority=1;NVIC_Init(&NVIC_InitStructure);
}void  TIM_Mode_Config(void)
{TIM_TimeBaseInitTypeDef  TIM_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_InitStructure.TIM_Period = (1000-1);TIM_InitStructure.TIM_Prescaler = (48-1);TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1  ;//ʱÖÓ·ÖƵÒò×ÓTIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;//¼ÆÊýģʽTIM_InitStructure.TIM_RepetitionCounter =0;//Öظ´¼ÆÊýÖµ£¬Ã»ÓÐÓõ½²»ÓùÜTIM_TimeBaseInit(TIM3,&TIM_InitStructure);TIM_ClearFlag(TIM3,TIM_FLAG_Update);TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);TIM_Cmd(TIM3, ENABLE);
}void TIM_Config(void)
{TIM_NVIC_Config();TIM_Mode_Config();
}uint32_t  gtime;
uint8_t   Utime;
void  TIM3_IRQHandler(void)
{if(TIM_GetITStatus(TIM3,TIM_IT_Update) != RESET){TIM_ClearITPendingBit(TIM3,TIM_IT_Update);gtime++;Utime++;gtime100ms++;if(gtime>=10000){gtime =0;} if(Utime>=100){Utime=0;USART1_Send_Array_HalfWord(USART1, RegularConvData_Tab,3);//
//           USART1_Send_Array_Byte(USART1,test,6);}}
}

PWM使用:
PWM概念这里也不再过多叙述,只讲下PWM最主要的几个点
1.PWM的周期
PWM周期由时钟频率,分频系数,计数周期决定
PWM周期=分频系数*计数周期/时钟频率
2.PWM占空比:
*占空比=TIM_Pulse 的值/(分频系数**计数周期)


```c
#include "PWM.H"uint16_t TimerPeriod = 0;uint16_t Channel1Pulse = 0;void PWM_GPIO_Config(void)
{GPIO_InitTypeDef   GPIO_InitStructure;/* ʹÄÜGPIOʱÖÓ */RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);/* ÅäÖÃGPIO¹Ü½Å¸´ÓÃ*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_2);
}void PWM_Mode_Config(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);TimerPeriod= 9999;Channel1Pulse = (uint16_t) (((uint32_t) 5 * (TimerPeriod - 1)) / 10);TIM_TimeBaseInitStructure.TIM_Period = TimerPeriod;TIM_TimeBaseInitStructure.TIM_Prescaler = 7400-1;TIM_TimeBaseInitStructure.TIM_ClockDivision =  TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, & TIM_TimeBaseInitStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = Channel1Pulse;  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC2Init(TIM2, &TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM2, ENABLE);TIM_Cmd(TIM2, ENABLE);
//    TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);
//    TIM_CtrlPWMOutputs(TIM2, ENABLE);
}void  PWM_Config(void)
{PWM_GPIO_Config();PWM_Mode_Config();
}

TIM定时器与PWM使用相关推荐

  1. STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    本篇文章包含的内容 一.输入捕获 1.1 输入捕获简介 1.2 输入捕获通道的工作原理 1.3 输入捕获的主从触发模式 1.4 输入捕获和PWMI结构 二.频率的测量方法 2.1 测频法 2.2 测周 ...

  2. stm32常见定时器---TIM定时及PWM输出

    STM32 常见定时器资源: 系统滴答定时器SysTick----提供时钟节拍做时间基准 看门狗定时器WatchDog----防止程序跑飞 实时时钟RTC 基本定时器:TIM7.TIM6 通用定时器: ...

  3. STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值

    参考:stm32 定时器输出PWM原理及工作原理+控制舵机 作者:点灯小哥 发布时间: 2021-03-09 23:17:52 网址:https://blog.csdn.net/weixin_4601 ...

  4. STM32通用定时器输出PWM

    1 .TIMx简介 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成. 它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM). 使用定时器预分 ...

  5. stm32F051系列 单片机引脚定时器输出pwm波形控制风扇转速

    概述:stm32的每个引脚都有其自带的特殊功能,有定时器输出功能的引脚可以输出pwm.如果没有的也可以io口模拟输出,如果非要较真的话,理论上可以算是每个引脚都能输出PWM,但一般我们都使用带定时器输 ...

  6. STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)

    本篇文章包含的内容 一.TIM 定时器 1.1 TIM 定时器简介 1.2 TIM 定时器类型及其工作原理简介 1.2.1 基本定时器工作原理及其结构 1.2.2 通用定时器工作原理及其结构 1.2. ...

  7. stm32 定时器输出PWM原理及工作原理+控制舵机

    1.PWM的工作原理 2.PWM的内部运作机制 3.PWM的模式 模块一  边沿对齐模式 模块二 中央对齐模式 4.自动加载的预加载寄存器 5.定时器输出PWM结构体讲解 6.定时器输出PWM库函数讲 ...

  8. STM32 多个定时器 多路PWM配置

    实验过程中的笔记   在持续更新中  只是一个简化版本 利用定时器1 2 3 4 配置的PWM输出 高级定时器的 PWM 输出,与普通定时器稍有区别,必须通过函数 TIM_CtrlPWMOutputs ...

  9. STM32f103C8定时器输出PWM波信号

    利用stm32高级定时器输出PWM,模拟呼吸灯的效果带刹车功能.由于没有示波器查看输出的pwm波形图,所以本次实验使用普通直流电机模拟的. 本文章为学习笔记,其中有些地方解释的不是那么的好,即本笔记可 ...

最新文章

  1. 实验十 配置EIGRP协议
  2. python.freelycode.com-Python数据可视化2018:为什么这么多的库?
  3. Activiti中的各个service的作用
  4. 机器学习和深度学习笔记(Matlab语言实现)
  5. 答案 石头剪刀布 编码过程 0912
  6. CCF202012-1 期末预测之安全指数
  7. npm命令用于卸载或修剪Node.js中未使用的包
  8. 浅谈:如何加快本本的开机时间
  9. 萦绕在头脑中的思路_我的编程梦们 【更新至2010.06.03】
  10. 网络拓扑结构_全球网络拓扑测绘这样来实现
  11. RGB565 转 HSV C语言实现
  12. 惠普m227fdw引擎通信错误_惠普打印机HPM227提示耗材余量错误怎么办?
  13. 每日一坑:不支援 10 验证类型。请核对您已经组态 pg_hba.conf 文件包含客户端的IP位址或网路区段,以及驱动程序所支援的验证架构模式已被支援。
  14. myeclipse自定义背景颜色
  15. 使用腾讯云Ubuntu20.04搭建代理服务器
  16. ASO优化优缺点各是什么?带你学会常见的优化手段
  17. 如何获得免费虚拟主机,云服务器呢?(免费)
  18. .tar和.tar.gz的区别
  19. openfire开发
  20. springboot瘦身打包

热门文章

  1. html中按钮没反应,点击按钮没反应?所有按钮都没反应
  2. ioctl函数获取/修改mac地址(C语言实现)
  3. 3GPP TS 38.211 物理信道和调制-上行链路
  4. 【独行秀才】macOS Big Sur 11.6.1正式版(20G224)原版镜像
  5. amd插帧技术如何开启_让游戏帧数暴涨,RX 590解锁蓝宝独家黑科技
  6. Java正则表达式学习及使用案例干货
  7. Windows11下wsl的安装与卸载
  8. Vs2017远程调试图文教程(以及避坑点)
  9. 荣耀战魂 服务器维护4,《荣耀战魂》1.04 升级补丁更新 例行修复错误优化体验...
  10. php 短信互动,科学网—与著名心理学家车文博先生短信互动 - 蒋永华的博文