Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
GPIO
M2354
PWM
【NuMaker-M2354试用】GPIO+PWM测试分享(持续更新中)
发布于 2021-12-05 12:51:30 浏览:954
订阅该版
# M2354-开发板使用流程 [TOC] ## *此次任务* 任务说明: 时间:要求一个月内完成任务 完成任务时间:11月19日-12月19日 这次我的任务就是GPIO+PWM的测试: 其中 - GPIO为测试基础外设; - PWM为测试复杂外设。 ## start 之前其实接触不是很多,算是边学边弄,新手遇到问题比较多。 ### 开发环境 - win10 - git - sourcetree(个人习惯) - RT-Thread EVN 工具 + MDK5 ### *功能模块的硬件介绍* - nu-maker-m2354-外设的简单示意图 ![image.png](https://oss-club.rt-thread.org/uploads/20211205/3de3ef606f3e8726bb28be4071725ce3.png.webp) - 收到的实物 ![image.png](https://oss-club.rt-thread.org/uploads/20211205/a7eedaba7b059f482b38a9e719c7531e.png.webp) 收到的实物有送一块屏幕 (需要自备一条可以烧写的micro usb线,不要单纯充电的) ### 功能模块的使用说明 从gitee上下载rtthread完整版 再选择 gitee-master 分支,标签为 v4.0.4 及以上。 我使用的是sourcetree ,直接git命令亦可。 ![image.png](https://oss-club.rt-thread.org/uploads/20211205/5c81e4b4ebb54bf334d82303929c26be.png.webp) - 删除bsp文件夹下,与numaker-m2354 无关的文件(即 bsp\nuvoton\numaker-m2354等) ,以减少文件的大小。 - 在bsp\nuvoton\numaker-m2354 文件下,使用ENV工具,依次输入命令 `menuconfig --generate` `pkgs --update` `scons --target=mdk5` 再用`menuconfig` 命令 裁剪自己需要的模块 ### 外设性能指标测试 ·main ```c /**************************************************************************//** * * @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2020-8-26 Wayne First version * ******************************************************************************/ #include
#include
#include
#include "NuMicro.h" int main(int argc, char **argv) { #if defined(RT_USING_PIN) while (1) { rt_thread_mdelay(1000); } #endif return 0; } ``` ·GPIO ```c #include
#include
#include
/****** 1.GPIO 输入 2.GPIO 输出 3.GPIO 中断 *********/ /* defined the LEDR pin: PD3 */ #define LEDY NU_GET_PININDEX(NU_PD, 3) #define LEDG NU_GET_PININDEX(NU_PD, 2) #define SW2 NU_GET_PININDEX(NU_PF, 11) void led_entery(void *parameter); void keycan_entery(void *parameter); void led_entery(void *parameter) { rt_pin_mode(LEDY, PIN_MODE_OUTPUT); rt_pin_mode(LEDG, PIN_MODE_OUTPUT); rt_kprintf("led_entery running...\n"); while(1) { rt_pin_write(LEDY, PIN_HIGH); rt_pin_write(LEDG, PIN_LOW); rt_thread_mdelay(500); rt_pin_write(LEDY, PIN_LOW); rt_pin_write(LEDG, PIN_HIGH); rt_thread_mdelay(500); } } static int led_entery_init(void){ rt_thread_t thread = RT_NULL; thread = rt_thread_create("led_demo",led_entery,RT_NULL,1024,15,5); if(thread == RT_NULL) { rt_kprintf("rt_thread_create led_entery failed...\n"); return RT_ERROR; } rt_thread_startup(thread); rt_kprintf("rt_thread_create led_entery successed...\n"); } INIT_APP_EXPORT(led_entery_init); // 线程自动初始化 void keycan_entery(void *parameter) { int SW2_pin_read,SW2_pin_read_last=0; rt_pin_mode(SW2, PIN_MODE_INPUT_PULLUP); rt_kprintf("sw2_entery running...\n"); while(1) { rt_thread_mdelay(20); SW2_pin_read=rt_pin_read(SW2); if(SW2_pin_read!=SW2_pin_read_last)//SW2有变化 { rt_thread_mdelay(10);//消抖 if(SW2_pin_read==0) { rt_kprintf("Button 2 is on\n"); } if(SW2_pin_read==1) { rt_kprintf("Button 2 is off\n"); } SW2_pin_read_last=SW2_pin_read; } } } static int sw2_entery_init(void){ rt_thread_t thread = RT_NULL; thread = rt_thread_create("key_demo",keycan_entery,RT_NULL,1024,15,5); if(thread == RT_NULL) { rt_kprintf("rt_thread_create keycan_entery failed...\n"); return RT_ERROR; } rt_thread_startup(thread); rt_kprintf("rt_thread_create keycan_entery successed...\n"); } INIT_APP_EXPORT(sw2_entery_init); // 线程自动初始化 void read_pin(void *parameter) { rt_pin_mode(SW2, PIN_MODE_INPUT_PULLUP); rt_kprintf("Button 2 = %d\n",rt_pin_read(SW2)); } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(read_pin,read pin); ``` ·PWM ```c #include
#include
#include
#include "NuMicro.h" /******************** MCU:M2354KJFAE(LQFP128) Pin5:EPWM1_CH0 Pin6:EPWM1_CH1 Pin7:EPWM1_CH2 Pin8:EPWM1_CH3 Pin73:EPWM1_CH4 Pin74:EPWM1_CH5 Pin97:EPWM0_CH0 Pin98:EPWM0_CH1 ********************/ #define PWM_DEV_NAME "epwm0" /* PWM 设备名称 */ #define PWM_DEV_CHANNEL 0 /* PWM 通道 */ int argv=100; void pwm_example(void) { int result = 0; struct rt_device_pwm *device = RT_NULL; struct rt_pwm_configuration cfg = {0}; device = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); if(argv>=1000)argv=0;else argv=argv+200; rt_pwm_set(device,PWM_DEV_CHANNEL,1000,argv); rt_pwm_enable(device,PWM_DEV_CHANNEL); cfg.channel =PWM_DEV_CHANNEL; result = rt_pwm_get(device, &cfg); if (result != RT_EOK) { rt_kprintf("Get info of device: [%s] error.\n", device); } else { rt_kprintf("Get info of device: [%s]:\n",device); rt_kprintf("period : %d\n", cfg.period); rt_kprintf("pulse : %d\n", cfg.pulse); rt_kprintf("Duty cycle : %d%%\n", (int)(((double)(cfg.pulse)/(cfg.period)) * 100)); } } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(pwm_example,pwm_example0); void example(void) { /* Set multi-function pins for EPWM */ SYS->GPE_MFPL = (SYS->GPE_MFPL & ~(SYS_GPE_MFPL_PE7MFP_Msk)) | EPWM0_CH0_PE7; SYS->GPE_MFPL = (SYS->GPE_MFPL & ~(SYS_GPE_MFPL_PE6MFP_Msk)) | EPWM0_CH1_PE6; SYS->GPE_MFPL = (SYS->GPE_MFPL & ~(SYS_GPE_MFPL_PE5MFP_Msk)) | EPWM0_CH2_PE5; SYS->GPE_MFPL = (SYS->GPE_MFPL & ~(SYS_GPE_MFPL_PE4MFP_Msk)) | EPWM0_CH3_PE4; /* EPWM0 channel 0 frequency is 160000Hz, duty 50%, */ EPWM_ConfigOutputChannel(EPWM0, 0, 160000, 50); /* Enable output of EPWM0 channel 0 */ EPWM_EnableOutput(EPWM0, EPWM_CH_0_MASK); /* Enable EPWM0 channel 0 period interrupt, use channel 0 to measure time. */ EPWM_EnablePeriodInt(EPWM0, 0, 0); NVIC_EnableIRQ(EPWM0_P0_IRQn); /* Start */ EPWM_Start(EPWM0, EPWM_CH_0_MASK); // EPWM_ConfigCaptureChannel(EPWM1, 0, 1000, 20);//PC12 Pin5 EPWM_ConfigOutputChannel(EPWM0, 0,1000, 20);//占空比 } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(example,example0); void EPWM0_P0_IRQHandler(void) { static int32_t i32Toggle = 0; /* Update EPWM0 channel 0 period and duty */ if(i32Toggle == 0) { EPWM_SET_CNR(EPWM0, 0, 99); EPWM_SET_CMR(EPWM0, 0, 40); } else { EPWM_SET_CNR(EPWM0, 0, 399); EPWM_SET_CMR(EPWM0, 0, 200); } i32Toggle ^= 1; /* Clear channel 0 period interrupt flag */ EPWM_ClearPeriodIntFlag(EPWM0, 0); } ``` ### 可编译下载的代码,可给出gitee或者github链接 * (温馨提示:功能演示的视频可上传至B站,视频链接可放在测评文章里) ### issue记录地址:https://github.com/RT-Thread/rt-thread/issues ![image.png](https://oss-club.rt-thread.org/uploads/20211205/c73930b282994efb486e9a9903027e6f.png.webp) ## 下载路径 ## 编译过程 ## 调试 ###pwm 我使用的是epwm0 通道0 ,97号引脚。 ![image.png](https://oss-club.rt-thread.org/uploads/20211227/a22e389bb98c50e121abfb215946e369.png.webp) 终端显示的epwm的参数。 ![image.png](https://oss-club.rt-thread.org/uploads/20211227/91ffab2bb54b956628d5a9958f35f55e.png) 示波器显示的波形。 ![image.png](https://oss-club.rt-thread.org/uploads/20211227/287f66e288ba8b10267d4ace6e8a06ad.jpg.webp) ###gpio 读取引脚电平高低,及按键上下沿扫描 ![image.png](https://oss-club.rt-thread.org/uploads/20211227/44b81531a99790235fe36d6efd434c15.png) # 过程中我遇到的问题及解决 1. 连接线,需要可以烧写的micro usb , 之前一直识别不了开发板,最后发现是线的问题,还需要安装Nu-Link_Keil_Driver 3.07.7246r.exe 驱动。 2. 在使用ENV工具的时候,pkgs --update 命令不能正常使用,在网上找了很多 https://club.rt-thread.org/ask/question/429846.html?order=date 根据这个方法,再多次安装 pip工具及setuptools ,正常更新了。 再 pip install requests 命令+ install python-requests命令 解决这个问题。
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
羊肉汤面
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
drivers- pin
2
bsp 里面的drivers/gpio.c 少了一个功能
3
stm32f407移植RTT中gpio设备驱动问题
4
config PB4(NJTRST) to GPIO
5
RT-Thread的GPIO设备驱动问题
6
关于pin.c文件中语句可能出现的bug
7
RT-Thread学习笔记--线程创建与官方Pin设备驱动调用
8
【应用笔记】小白也能玩转RT-Thread之通用GPIO设备【官方出品
9
串口引脚定义中的GPIO_Pin_sources是社么意思?
10
RTT -GPIO 使用例程
推荐文章
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
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
4
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部