发帖
7 0 0

安信可Ai-M61-32S PWM试用记录,VSCODE”转到定义”无法使用解决方法

HaydenHu
金牌会员

2

主题

188

回帖

1493

积分

金牌会员

积分
1493
Ai-M61系列 88 7 4 天前

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

1、编译PWM_V1例程

aithinker_Ai-M6X_SDK\examples\peripherals\pwm_v1\pwm_basic

image.png

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

image.png

2、编译PWM_V2

aithinker_Ai-M6X_SDK\examples\peripherals\pwm_v2

image.png

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

image.png

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

image.png

{
    "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
}

此时右键跳转就正常了

image.png

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

image.png

3、下载程序:

同时按住EN和IO2两个按键,输入 make flash COMX=COM7

命令回车后,松开EN按键,等待下载完成,下载完成后松开IO2按键,然后按一下EN复位程序,此时PWM程序就能运行了。

image.png

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

image.png

image.png

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);
    }
}

──── 0人觉得很赞 ────

使用道具 举报

c_cpp_properties.json 里面就是定义了 组件的位置, 包含了之后就可以被找到了。 PWM有没有输出最好还是看下数据手册
学到了,我每次都是蠢蠢的使用全局搜索
看一下我发的PWM那篇就知道了
3 天前
Ai-Thinker小泽 发表于 2025-3-3 10:06
看一下我发的PWM那篇就知道了

我看了,但没搞明白为啥board_pwm_gpio_init();函数初始化了24-31的GPIO,而只有部分io有输出的原因在哪里
3 天前
WangChong 发表于 2025-3-3 06:42
c_cpp_properties.json 里面就是定义了 组件的位置, 包含了之后就可以被找到了。 PWM有没有输出最好还是看 ...

c_cpp_properties.json应该就是vscode用来跳转的,不配置也能编译成功,但无法跳转
前天 23:18
又学了一招,赚了
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28019 个
  • 话题数: 39445 篇