乐鑫技术交流
直播中

石正厚

8年用户 1211经验值
私信 关注
[问答]

WDT在pwm_init上复位的原因?

我能够让 pwm 使用以下代码:

#include "ets_sys.h"
#include "osapi.h"
#include "user_interface.h"

void show_mac (void) {
    unsigned char mac[6];
    // wifi_get_macaddr ( STAtiON_IF, mac );
    // os_printf ( "MAC: %02x:%02x:%02x:%02x:%02x:%02xn",
    // mac[0], mac[1], mac[2], mac[3], mac[4], mac[5] );
}

无效 user_init() {

    uart_div_modify(0, UART_CLK_FREQ / 115200);
    gpio_init();

    uint32_t io_info[1][3] = {   
                          {PERIPHS_IO_MUX_MTCK_U,FUNC_GPIO13,13},
                          };

    uint32_t duty[1] = {500};
    pwm_init(1000, duty,1,io_info);
    pwm_start();

    // show_mac ();

}



但是,如果我取消评论,只需第 7 行,如下所示:

#include "ets_sys.h"
#include "osapi.h"
#include "user_interface.h"

void show_mac (void) {
    unsigned char mac[6];
    wifi_get_macaddr ( STATION_IF, mac );
    // os_printf ( "MAC: %02x:%02x:%02x:%02x:%02x:%02xn",
    // mac[0], mac[1], mac[2], mac[3], mac[4], mac[5] );
}

无效 user_init() {

    uart_div_modify(0, UART_CLK_FREQ / 115200);
    gpio_init();

    uint32_t io_info[1][3] = {   
                          {PERIPHS_IO_MUX_MTCK_U,FUNC_GPIO13,13},
                          };

    uint32_t duty[1] = {500};
    pwm_init(1000, duty,1,io_info);
    pwm_start();

    // show_mac ();

}


它崩溃:

ets 2013 年 1 月 8 日,第一个原因:4,启动模式:(1,0)

WDT 复位


这特别奇怪,因为我甚至还没有调用 show_mac() 函数!

我正在使用 pfalcon/open-sdk 和工具链,它使用 v1.4.0 sdk。这是我正在使用的 makefile:


# Makefile for older versions (<1.0) of Espressif "AT" firmware
CC = xtensa-lx106-elf-gcc
CFLAGS = -I. -mlongcalls
LDLIBS = -nostdlib -Wl,--start-group -lmain -lupgrade -lnet80211 -lwpa -llwip -lpp -lphy -Wl,--end-group -lcirom -lgcc -lpwm
LDFLAGS = -Teagle.app.v6.ld

malarm-0x00000.bin: malarm
   esptool.py elf2image $^

malarm:malarm.o
   $(CC) $(LDFLAGS) $^ -o $@ $(LDLIBS)

malarm.o:malarm.c

闪光灯:malarm-0x00000.bin
   esptool.py write_flash 0 malarm-0x00000.bin 0x40000 malarm-0x40000.bin

连接:
   picocom -b 115200 --omap crcrlf /dev/ttyUSB0



有什么想法或想法吗?谢谢。
                                                                                                                                                      

回帖(1)

陈博

2024-7-19 17:18:36
首先,让我们逐步分析您提供的代码和问题。

问题:WDT在pwm_init上复位的原因?

在这个问题中,您似乎在询问为什么在初始化PWM(脉冲宽度调制)时,看门狗定时器(WDT)会复位。然而,您提供的代码并没有直接涉及到PWM初始化或看门狗定时器。

提供的代码:
1. 包含头文件:ets_sys.h, osapi.h, user_interface.h
2. 定义了一个名为show_mac的函数,该函数获取MAC地址并打印出来。但是,该函数中的wifi_get_macaddr和os_printf调用被注释掉了。
3. 定义了一个名为user_init的函数,但是函数体不完整,只有一个uart_div_modify宏调用。

现在,让我们尝试解决您的问题。

要解决WDT在PWM初始化时复位的问题,我们需要考虑以下几点:

1. 确保PWM初始化代码正确编写,没有导致意外复位的逻辑错误。
2. 检查看门狗定时器的配置,确保其在PWM初始化期间不会触发复位。
3. 如果可能,检查硬件连接和电源供应,以确保它们在PWM初始化期间稳定。

然而,由于您提供的代码与PWM初始化和看门狗定时器无关,我们无法直接解决您的问题。为了更好地帮助您,我们需要更多关于PWM初始化和看门狗定时器的代码和上下文信息。

关于您提供的代码,以下是一些建议:

1. 如果您希望显示MAC地址,请取消注释wifi_get_macaddr和os_printf调用。
2. 在user_init函数中,您需要完成函数体,以便在系统启动时执行所需的初始化操作。例如,您可以在此处初始化PWM或看门狗定时器。

如果您能提供更多关于PWM初始化和看门狗定时器的代码和详细信息,我们将能够更准确地回答您的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分