在线时间1312 小时
UID3124330
注册时间2015-11-26
NXP金币2830
TA的每日心情 | 开心 2019-3-5 08:47 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
金牌会员
 
- 积分
- 9004
- 最后登录
- 2025-7-20
|
本帖最后由 jundao721 于 2016-4-4 20:44 编辑
看文档的时候会注意到,一般常用的定时器有两种,一种带PWM的普通定时器,一种是低功耗定时器LPTIMER。就从SDK移植来说,普通定时器还是需要动点脑筋。因为在配置上有一些需要特别注意的地方。首先呢,承袭原来的套路,keil5建立工程,加载文件,配置环境,这些在前面都说过了。主要来讲讲定时器的应用,做个简单的呼吸灯。主要是有几个文件需要修改。第一个当然是硬件初始化hardware_init.c文件。除了引脚时钟,需要添加以下两句。- configure_tpm_pins(2U);
- CLOCK_SYS_SetTpmSrc(2u, kClockTpmSrcIrc48M);
复制代码 从函数命名中就知道配置定时器外设引脚和设置定时器时钟。从而需要修改配置定时器引脚文件pin_mux.c.- PORT_HAL_SetMuxMode(PORTA,2u,kPortMuxAlt3);
复制代码 现在可以写main函数了。添加定时器驱动文件。
- #include "fsl_tpm_driver.h"
复制代码 接下来就是配置定时器,初始化定时器。
- tpm_general_config_t driverInfo;
- tpm_pwm_param_t param = {
- .mode = kTpmEdgeAlignedPWM,
- .edgeMode = kTpmHighTrue,
- .uFrequencyHZ = 120000u,
- .uDutyCyclePercent = 99u
- };
复制代码 这些定义在SDK的说明文档里都有,可以随时翻阅。接下来启动定时器,利用PWM完成呼吸灯的功能。- TPM_DRV_PwmStart(2u,¶m,1u);
- if((param.uDutyCyclePercent>=100)||(param.uDutyCyclePercent<=0))
- {
- step *=-1;
- }
-
- param.uDutyCyclePercent +=step;
复制代码 OK,这个时候就可以仿真以下看一下效果。发现,不行,继续找原因,设置都对呀。其他led引脚都能实现。忽然想起来了,有一个地方的配置和所用led的引脚冲突了。就是在开始的硬件初始化函数中默认的串口初始化,注释掉就没冲突了。呼吸灯功能就算完成了。写的简单,还是需要实际操练思考。
|
评分
-
查看全部评分
|