Mrzhao
Mrzhao - 认证专家
一个嵌入式爱好者。CSDN主页:https://blog.csdn.net/qq_37280428?spm=1011.2415.3001.5343

注册于 2 years ago

回答
43
文章
7
关注者
7

看SDK,里面有硬件SPI的,但是主最多只能干到20,从可以用hspi。
image.png

第一个问题:我大概看了一下程序,有通道4,你在初始化哪里可以把if判断删除掉,cmd函数中有判断是否为0和4.我也怀疑是bug。。。。。@isme 快来解答
image.png

第二个问题:0表示持续输出,我方式就吃了这个亏。,。。。。
image.png
还有一个坑:
image.png
这里当duty设置为0,PWM就stop了,所以,要把这几句屏蔽掉,否者下次使用你还要start.

第三个问题:
溢出次数。
我看手册发现这个,你定时去读取这里的数据,判断是否溢出,手动清除。然后多次计数实现?@isme @ZYQ 两位大佬觉得这样可行不???
image.png

是否设置:hpwm.Init.OutMode = PWM_OUT_MODE_INDEPENDENT; //独立通道输出

异常抛出一般是你内存出问题了,你看看 你的参数中用的内存有没有越界之类的。注意IIC接收数据的存放问题

有nop

#include "wm_hal.h"
#include "assert.h"


//160MZH  53个nop就是1us
//240Mhz  80个nop就是1us
//可以实现1ms以下的延时,多了的 就不要用了。不准。
//5u以下的延时会存在误差 注意。
static void Delay_Us(uint8_t freq,uint32_t time)
{
    uint32_t i;
    uint16_t num = 90;
    if(time > 1000)
    {
        printf("delay time is too lager than 1000, please use HAL_Delay()\r\n");
    }
    switch(freq)
    {
        case 240: num = 80;break;
        case 160: num = 53;break;
        default: printf("delay input freq err...default set 240MHZ us time \r\n ");break;
    }
    
    for (i = 0; i < (num)*time; i++)
    {
        __NOP();
    }
}

我来回答第二个问题:我当时遇到过。为0后PWM必须要重新start,因此可以这样做:
image.png

PWM的配置的IO是浮空。

这种问题我建议直接判定为灌水@isme

说起智能小灯那就非常棒了:参考文章(有完整工程)
https://blog.csdn.net/qq_37280428/article/details/124109497
流程图:
image.png

5v分压成2.5 R1和R2可以取相同的阻值,比如10k那就是平均分2.5v和2.5v。
。。。。
但是如果严格要求2.4v以下那你可以取3:2.及3k和2k

ADC测量的是电压,不能只接NTC,找了一张图你可以参考:
image.png
这样接你读出来的adc电压 = VCC_3V-V(ntc)。你还需要找到NTC电阻的电压和温度的关系,进而得出电压。

发布
问题