完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
概述
本篇文章主要介绍如何使用e2studio对瑞萨单片机进行PWM输出。 硬件准备 首先需要准备一个开发板,这里我准备的是芯片型号R7FA2L1AB2DFL的开发板: 新建工程 工程模板 保存工程路径 芯片配置 本文中使用R7FA2L1AB2DFL来进行演示。 工程模板选择 选择定时器 时钟源在这设置的是PCKLD 48M 。 可以通过修改该频率来修改占空比频率。 PWM(脉冲宽度调制) 脉冲宽度调制是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。 在瑞萨RA系列MCU中有两种定时器,一种是通用PWM定时器GPT,另外一种是异步通用定时器AGT。 频率=主频/period +占空比=cycle/period 定时器管脚配置 通过点击需要配置的管脚,选择GTIOC1即可配置。 定时器配置 点击Stacks->New Stack->Driver->Timers->Timer Driver on r_gpt。 工程文件 查看pin_data.c,可以看到定时器0的定义已经写入,说明配置成功。 打开main.c函数,发现写了一个hal_entry ()函数。 R_GPT_Open()函数原型 故可以用 R_GPT_Open()函数进行初始化时器模块并应用配置。 /* Initializes the module. */ err = R_GPT_Open(&g_timer2_ctrl, &g_timer2_cfg); /* Handle any errors. This function should be defined by the user. */ assert(FSP_SUCCESS == err); R_GPT_Start()函数原型 故可以用R_GPT_Start()函数进行开启定时器。 /* Start the timer. */ (void) R_GPT_Start(&g_timer0_ctrl); R_GPT_PeriodSet()函数原型 频率=时钟源/period,若设置频率为10K,则period=48M/10K=4800 err = R_GPT_PeriodSet(&g_timer0_ctrl, 4800);//频率 assert(FSP_SUCCESS == err); R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);//不加延时可能会设置不成功 R_GPT_DutyCycleSet()函数原型 +占空比=cycle/period,若设置+占空比为50%,则cycle= +占空比* period=50%*4800=2400 err = R_GPT_DutyCycleSet(&g_timer2_ctrl, 1250, GPT_IO_PIN_GTIOCA);//占空比 assert(FSP_SUCCESS == err); R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);//不加延时可能会设置不成功 不加延时可能会设置不成功 R_GPT_Reset()函数原型 将计数器值重置为 0。 err = R_GPT_Reset(&g_timer2_ctrl); assert(FSP_SUCCESS == err); 代码 在hal_entry()中添加如下。 #include "hal_data.h" FSP_CPP_HEADER void R_BSP_WarmStart(bsp_warm_start_event_t event); FSP_CPP_FOOTER /*******************************************************************************************************************//** * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function * is called by main() when no RTOS is used. **********************************************************************************************************************/ void hal_entry(void) { /* TODO: add your own code here */ fsp_err_t err = FSP_SUCCESS; /* Initializes the module. */ err = R_GPT_Open(&g_timer2_ctrl, &g_timer2_cfg); /* Handle any errors. This function should be defined by the user. */ assert(FSP_SUCCESS == err); /* Start the timer. */ (void) R_GPT_Start(&g_timer2_ctrl); err = R_GPT_PeriodSet(&g_timer2_ctrl, 5000);//频率 assert(FSP_SUCCESS == err); R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);//不加延时可能会设置不成功 err = R_GPT_DutyCycleSet(&g_timer2_ctrl, 1250, GPT_IO_PIN_GTIOCA);//占空比 assert(FSP_SUCCESS == err); R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);//不加延时可能会设置不成功 err = R_GPT_DutyCycleSet(&g_timer2_ctrl, 2250, GPT_IO_PIN_GTIOCB);//占空比 assert(FSP_SUCCESS == err); R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);//不加延时可能会设置不成功 err = R_GPT_Reset(&g_timer2_ctrl); assert(FSP_SUCCESS == err); R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);//不加延时可能会设置不成功 while(1) { R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);//不加延时可能会设置不成功 } #if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif } 结果演示 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3458 浏览 1 评论
9002 浏览 16 评论
4051 浏览 18 评论
1110浏览 3评论
572浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
569浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2302浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1859浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 23:18 , Processed in 1.500101 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号