PWM试用记录,首先尝试使用PWM_V1编译报错,没通过,我就换了PWM_V2,可以正常编译成功,但是突然发现VSCODE中右键跳转到函数定义无法正常跳转,后来发现是头文件的引用路径默认工程是没有定义的,定义好就没问题了。
1、编译PWM_V1例程
aithinker_Ai-M6X_SDK\examples\peripherals\pwm_v1\pwm_basic

报错信息如下,不知如何解决,希望大佬们看到回复解决方法。

2、编译PWM_V2
aithinker_Ai-M6X_SDK\examples\peripherals\pwm_v2

编译成功,但是头文件引用有红色波浪线错误,这也是为啥我接下来使用右键菜单的跳转到定义(快捷键F12)为啥无法正常的跳转的原因所在。(编译PWM_V1和其他SDK例程也会这样)

点击“编辑includepath设置按钮,此时会自动在工程根目录下.vscode文件夹中生成c_cpp_properties.json文件,在其中如下配置正确的头文件引用路径就可以了。此处我使用的是相对路径。

{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}../../../../../**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.19041.0",
"compilerPath": "cl.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-msvc-x64"
}
],
"version": 4
}
此时右键跳转就正常了

我们跳转到PWM的GPIO定义脚,发现GPIO24-GPIO31就是PWM输出脚

3、下载程序:
同时按住EN和IO2两个按键,输入 make flash COMX=COM7
命令回车后,松开EN按键,等待下载完成,下载完成后松开IO2按键,然后按一下EN复位程序,此时PWM程序就能运行了。

4、测试程序运行结果,示波器探头接GPIO24和GPIO28脚,可以看到1KHz的PWM波形,其他的PWM输出GPIO可能是被占用或是什么原因没有输出,我还没搞明白,知道的欢迎回帖赐教。


5、SDK例程代码,没有做修改,默认如下:
#include "bflb_mtimer.h"
#include "bflb_pwm_v2.h"
#include "bflb_clock.h"
#include "board.h"
struct bflb_device_s *pwm;
int main(void)
{
board_init();
board_pwm_gpio_init();
pwm = bflb_device_get_by_name("pwm_v2_0");
/* period = .XCLK / .clk_div / .period = 40MHz / 40 / 1000 = 1KHz */
struct bflb_pwm_v2_config_s cfg = {
.clk_source = BFLB_SYSTEM_XCLK,
.clk_div = 40,
.period = 1000,
};
bflb_pwm_v2_init(pwm, &cfg);
bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH0, 100, 500); /* duty = (500-100)/1000 = 40% */
bflb_pwm_v2_channel_positive_start(pwm, PWM_CH0);
bflb_pwm_v2_start(pwm);
while (1) {
printf("pwm basic running\r\n");
bflb_mtimer_delay_ms(2000);
}
}