Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread活动
瑞萨_RA6M4
RA6M4+RT-Thread PWM驱动LED
发布于 2022-07-24 16:51:27 浏览:597
订阅该版
[tocm] # 前言 本文讲解如何使用RA6M4的硬件PWM来驱动板载LED。 # 基础 1. 我们先看一下芯片手册,板载LED是连接在P106上的,可以复用为GPT的GTIOC8B,如下图。 可以知道P106连接在了GPT168(也就是GPT8)的CH8上。   2. 知道了上面的信息,我们可以开始用RA Smart Configurator来配置端口为PWM模式了, 如下,新建一个PWM定时器。  3. 对新建的PWM生成器进行详细设置  4. 配置GPT8端口 如下需要配置GPT8为使能状态。  5. 将P106端口配置为复用PWM模式  保存生成配置代码 6. 在RT-Thread Setting中使能GPT8  保存 # 编辑代码 代码如下: ```c /* * Copyright (c) 2006-2021, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2022-06-13 hehung the first version */ #include "app_led.h" #include
#include
#include "hal_data.h" #define THREAD_STACK_SIZE_LED (4096U) #define THREAD_PRIORITY_LED (10U) #if (LED_DRIVER_MODE == LED_MODE_IO) #define LED3_PIN BSP_IO_PORT_01_PIN_06 #else #define LED_led_pwm_dev_NAME ("pwm8") /* PWM设备名称 */ #define LED_led_pwm_dev_CHANNEL (0) /* PWM通道 */ #define LED_PWM_PERIOD (1000U) #endif static rt_thread_t thread_led_hd = RT_NULL; static void Led_Thread_Entry(void *para); static void Led_Mngr(void); #if (LED_DRIVER_MODE == LED_MODE_IO) static void Led_OutputIo(void); #else static void Led_OutputPwm(void); #endif /* LED线程初始化函数 */ void Led_TaskCreate(void) { thread_led_hd = rt_thread_create("thread_led", Led_Thread_Entry, RT_NULL, THREAD_STACK_SIZE_LED, THREAD_PRIORITY_LED, 10); if (RT_NULL != thread_led_hd) { rt_thread_startup(thread_led_hd); } } /* LED任务入口 */ static void Led_Thread_Entry(void *para) { Led_Mngr(); } /* LED驱动函数 */ static void Led_Mngr(void) { #if (LED_DRIVER_MODE == LED_MODE_IO) Led_OutputIo(); #else Led_OutputPwm(); #endif } #if (LED_DRIVER_MODE == LED_MODE_IO) /* 普通IO控制LED闪烁 */ static void Led_OutputIo(void) { static rt_uint8_t pin_lvl = PIN_HIGH; while (1) { rt_pin_write(LED3_PIN, pin_lvl); /* 反转电平 */ pin_lvl ^= 1; rt_thread_mdelay(500); } } #else /* PWM控制LED闪烁 */ static void Led_OutputPwm(void) { rt_uint32_t led_pwm_pulse = 0; /* PWM占空比*/ rt_bool_t dir_flg = RT_FALSE; /* PWM脉冲宽度值的增减方向 */ /* PWM设备句柄 */ struct rt_device_pwm *led_pwm_dev; /* 查找设备 */ led_pwm_dev = (struct rt_device_pwm *)rt_device_find(LED_led_pwm_dev_NAME); if (led_pwm_dev == RT_NULL) { rt_kprintf("led pwm run failed! can't find %s device!\n", LED_led_pwm_dev_NAME); } /* 设置PWM周期和脉冲宽度默认值 */ rt_pwm_set(led_pwm_dev, LED_led_pwm_dev_CHANNEL, LED_PWM_PERIOD, led_pwm_pulse); /* 使能设备 */ rt_pwm_enable(led_pwm_dev, LED_led_pwm_dev_CHANNEL); while (1) { led_pwm_pulse = (dir_flg) ? (led_pwm_pulse - 50) : (led_pwm_pulse + 50); if (led_pwm_pulse >= LED_PWM_PERIOD) { dir_flg = RT_TRUE; } else if (0 == led_pwm_pulse) { dir_flg = RT_FALSE; } /* 设置PWM周期和脉冲宽度 */ rt_pwm_set(led_pwm_dev, LED_led_pwm_dev_CHANNEL, LED_PWM_PERIOD, led_pwm_pulse); rt_thread_mdelay(50); } } #endif ```
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
hehung
这家伙很懒,什么也没写!
文章
6
回答
0
被采纳
0
关注TA
发私信
相关文章
1
(苏州站)RT-Thread物联网开发者沙龙【已结束】
2
(成都站)RT-Thread物联网开发者沙龙
3
(深圳站)RT-Thread物联网开发者沙龙
4
(西安站)RT-Thread物联网开发者沙龙
5
成都站2018 RT-Thread开发者沙龙回顾及PPT下载
6
2018 RT-Thread物联网开发者沙龙(北京站)
7
2018 RT-Thread物联网开发者沙龙(南京站)
8
第十三届研电赛RT-Thread企业专项奖发布通知
9
RT-Thread应用作品征集大赛开始啦!
10
你的投票将决定RT-Thread官网应该优先准备的文档是哪些
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
cubemx
UART
ESP8266
WIZnet_W5500
BSP
ota在线升级
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
ADC
GD32
定时器
编译报错
flashDB
keil_MDK
socket
中断
rt_mq_消息队列_msg_queue
Debug
ulog
SFUD
msh
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
818
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部