Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
请教个问题,我用BK7321,输出pwm,和adc,等其他外设没反应
发布于 2019-05-14 18:15:36 浏览:1803
订阅该版
* 本帖最后由 aozima 于 2019-5-14 19:26 编辑 * ```OSStatus wh_pwm_initialize(bk_pwm_t pwm, uint32_t frequency, float duty_cycle) { UINT32 ret; pwm_param_t param; /*init pwm*/ param.channel = (uint8_t)pwm; param.cfg.bits.en = PWM_DISABLE; param.cfg.bits.int_en = PWM_INT_EN; param.cfg.bits.mode = PMODE_PWM; param.cfg.bits.clk = PWM_CLK_26M; param.p_Int_Handler = 0; param.duty_cycle = duty_cycle; param.end_value = frequency; // ????? ret = sddev_control(PWM_DEV_NAME, CMD_PWM_INIT_PARAM, ¶m); ASSERT(PWM_SUCCESS == ret); rt_kprintf("liuweihao:%d
",ret);//liuweihao return kNoErr; } OSStatus wh_pwm_start(bk_pwm_t pwm) { UINT32 ret; UINT32 param; bk_gpio_config_output(GPIO19); bk_gpio_output(GPIO19, 1); param = pwm; ret = sddev_control(PWM_DEV_NAME, CMD_PWM_UNIT_ENABLE, ¶m); ASSERT(PWM_SUCCESS == ret); rt_kprintf("wh_pwm_startliuweihao:%d
",ret);//liuweihao return kNoErr; } OSStatus wh_pwm_stop(bk_pwm_t pwm) { UINT32 ret; UINT32 param; param = pwm; ret = sddev_control(PWM_DEV_NAME, CMD_PWM_UINT_DISABLE, ¶m); ASSERT(PWM_SUCCESS == ret); return kNoErr; } #if 1 #define PWM_DEV_NAME "pwm" /* PWM设备名称 */ #define PWM_DEV_CHANNEL 5 /* PWM通道 */ struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */ static int pwm_led_sample(int argc, char *argv[]) { rt_uint32_t period, pulse, dir; period = 500000; /* 周期为0.5ms,单位为纳秒ns */ dir = 1; /* PWM脉冲宽度值的增减方向 */ pulse = 0; /* PWM脉冲宽度值,单位为纳秒ns */ // bk_gpio_config_output(GPIO19); //bk_gpio_output(GPIO19, 1); wh_pwm_initialize(5,6500,3000); wh_pwm_start(5); /* 查找设备 */ pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); if (pwm_dev == RT_NULL) { rt_kprintf("pwm sample run failed! can't find %s device!
", PWM_DEV_NAME); return RT_ERROR; } /* 设置PWM周期和脉冲宽度默认值 */ rt_pwm_set(PWM_DEV_CHANNEL, period, pulse); /* 使能设备 */ rt_pwm_enable( PWM_DEV_CHANNEL); rt_kprintf("pwm 8888sample run failed! can't find %s device!
", pwm_dev); while (1) {rt_thread_mdelay(150); if (dir) { pulse += 5000; /* 从0值开始每次增加5000ns */ } else { pulse -= 5000; /* 从最大值开始每次减少5000ns */ } if (pulse >= period) { dir = 0; } if (0 == pulse) { dir = 1; } // wh_pwm_initialize(5,6500,3000); // wh_pwm_start(5); // rt_thread_mdelay(150); // wh_pwm_stop(5); /* 设置PWM周期和脉冲宽度 */ rt_pwm_set( PWM_DEV_CHANNEL, period, pulse); } } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(pwm_led_sample, pwm sample); void pwm_led_thread_entry(void *parameter) { pwm_led_sample(0,RT_NULL); } int pwm_led_thread_init(void) { rt_thread_t thread; thread =rt_thread_create("pwm_led", pwm_led_thread_entry,RT_NULL,512,20,10 ); if (thread != RT_NULL) { rt_thread_startup(thread); rt_kprintf("pwm_led_rt_thread_startup
"); } return RT_EOK; } //INIT_APP_EXPORT(pwm_led_thread_init); #endif``` 主函数就调用pwm_led_thread_init();个人调试出现的现象是 /* 设置PWM周期和脉冲宽度默认值 */ rt_pwm_set(PWM_DEV_CHANNEL, period, pulse);这个设置失败; 后面有人提示我没初始化,我按bk提供的例程修改 wh_pwm_initialize(5,6500,3000); wh_pwm_start(5); 初始化了这两个,还是不能输出PWM,求大佬解答
查看更多
2
个回答
默认排序
按发布时间排序
shadowliang
2019-05-14
Hello,world!!!
不知道楼主的问题是否解决了,可以试试我这个方法,把附件中的drv_pwm.c文件替换到项目工程文件夹中的driver目录下的drv_pwm.c文件(注意:建议先备份你原有drv_pwm.c文件。)还有在项目工程根目录下的rtconfig.h文件中添加 #define RT_USING_PWM 开启pwm模块,然后重新编译生成工程,把生成的bin文件烧录到板子上,如果编译等操作步骤没有报错,就可以在msh命令行中使用pwm 的操作,如:输入 pwm_set 1 8000 4000 //这是设置使用PWM 1 周期8us 占空比为50% ,然后输入 pwm_enable 1 // 这是启动pwm 1; 如果需要使用其他的pwm 通道可以把1换为对应的pwm通道数,周期也可以根据实际修改,设置好pwm 后可以在对应的引脚接一个led灯测试。
刘明洲
2019-05-15
这家伙很懒,什么也没写!
[i=s] 本帖最后由 刘明洲 于 2019-5-15 09:11 编辑 [/i] >不知道楼主的问题是否解决了,可以试试我这个方法,把附件中的drv_pwm.c文件替换到项目工程文件夹中的drive ... --- 我工程里有定义/* Device Drivers */ #define RT_USING_DEVICE_IPC #define RT_USING_SERIAL #define RT_USING_I2C #define RT_USING_I2C_BITOPS #define RT_USING_PIN #define RT_USING_PWM #define RT_USING_RTC #define RT_USING_SOFT_RTC #define RT_USING_WDT #define RT_USING_WIFI #define RT_USING_WLAN_STA #define RT_USING_WLAN_AP #define WIFI_DEVICE_STA_NAME "w0" #define WIFI_DEVICE_AP_NAME "ap" 这些东西,你给的dr_pwm.c跟我的.c类似,有点区别感谢,请大佬提供下,其他驱动的软件包可以?你的这个跟我那里面的那个有点区别,换上去可以了,感谢
撰写答案
登录
注册新账号
关注者
0
被浏览
1.8k
关于作者
刘明洲
这家伙很懒,什么也没写!
提问
2
回答
1
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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组件
最新文章
1
RT-Smart首次线下培训,锁定2024 RT-Thread开发者大会!
2
使用RC522软件包驱动FM1722
3
常量数据类型和表达式陷阱分享
4
进行i2c驱动移植的经验总结
5
在VSCode中使用clang-format
热门标签
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
本月问答贡献
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部