【东芝TT_M3HQ开发板试用体验】+PWM占空比
简介:本篇文章是我再学习使用PWM的一些经验和小小体会,还是要感谢官方给与这次机会,东芝TT_M3HQ开发板总体来说质量做工非常精致值得学习,东芝官方给大家提供的例程和固件库也是非常好的,他们写程序的方法和规范化值得学习.也希望官方能公布些更详细的使用手册,方便我们进行深入开发.
一.硬件介绍
例程PDF地址:TMPM3Hy_v1.2.01\TMPM3Hy_v1.2.01\TMPM3Hy_v1.2.0\Project\Examples\T32A\Timer_PPG\doc
官方的介绍比较简单,刚开始看这个介绍我也是有点晕头.接下来详细解读一下~~
二.引脚功能介绍
功能引脚 PJ0 / PV0 / PV1 / PA1
PJ0 这这个例程当中做为PWM输出引脚使用
S4(PV0) 用来做按键使用(低电平有效) 功能相当于确认按键
S5(PV1) 用来做按键使用(低电平有效) 功能用作于调占空比使用
TXD(PA1) 串口打印 它是板载的USB串口
本例程无RXD引脚的配置,应该是官方为了PWM输出的效果关掉了串口中断
三.软件介绍
官方例程比较有意思,也是和其他芯片厂商有着很大的区别.
1.BSP.c用来配置引脚的文件,它里面包含了所有的引脚配置,一幕了然,很方便. 其中包含了串口波特率的配置也在其中.
2.bsp_pulse.c文件 主要用于脉冲输出初始化设置
3.bsp_timer.c文件 只用用于定时器配置,PWM输出,定时器可以说是主要环节
4.bsp_uart_io.c文件 串口配置
5.bsp_psw.c 文件 按键输入捕获 为什么说是捕获呢 因为它使用的时中断
6.Periph_drver 为底层固件库 如果想深入学习可以看看,里面用结构体用的非常好,程序结构值得学习.如果只是想使用大可不必理会
四.主要程序介绍
也就是介绍下main.c文件,例程库内你会发现除了main.c不同其余的的程序文件都是相同的,
这里面写的较为复杂,差异的功能都是在此进行配置.
typedef struct
{
t32a_t t32a_timer; /*!< Application :T32A. */
t32a_t t32a_pulse; /*!< Application :T32A. */
sw_t sw[(uint32_t)BSP_PSW_MAX]; /*!< Application :Push SW */
timer_t timer; /*!< Application :Timer (ims timer). */
pulse_t pulse; /*!< Application :Timer (Output Pulse timer). */
gpio_t gpio_obj; /*!< Application :GPIO. */
} instance_t;
PWM配置结构体,可以仿真看看其结构体内的数据, (instance) 注意timer_t 和 pulse 是PWM输出占空比主要参数
static uint32_t tgtRisingTiming[Rate] = { 10U, 25U, 50U, 75U, 90U }; /* rigingtiming: 10%, 25%, 50%, 75%, 90% */
PWM占空比在此被定义成数组形式,S5触发一次Rate加1.
typedef enum
{
PROC_RUN, /*!< Timer Start :RUNNING. */
PROC_START, /*!< Timer Start :RUNNING. */
PROC_DUTY_CHANGE, /*!< Duty Change :CHANGE. */
} Processing;
以上结构体是按键的返回值
case PROC_DUTY_CHANGE:
{
/* Pulse Timer Stop */
pulse_timer_stop(&instance.pulse);
/* Pulse Timer Finalize */
pulse_timer_finalize(&instance.pulse);
delay(0xFFU); /* noise cancel */
FDuty += 10;
if (FDuty >= 90) { /* change leadingtiming rate
FDuty = 10;
} else {
/* Do nothing */
}
/* RisingTiming Value SET */
if(pulse_driver_initialize() == TXZ_ERROR) {
/* no processing */
}
/* Risingtiming rate Display */
risingtiming_change_display();
proc = PROC_RUN;
break;
}
以上是我做了一点更改的执行函数,主要作用没有做任何改变.PWM更改占空比值,会先让其停止工作,然后在重新初始化PWM相关配置.个人经验基本上我所用过的单片机都是这种逻辑操作
总结:以上是我经过几天的业余时间学习的一些体会,希望可以方便后来者开发使用.
资料下载链接 https://mbb.eet-china.com/forum/topic/73382_1_1.html