当前位置: 首页 > article >正文

STM32 HAL pe43xx衰减器使用教程

pe43xx衰减器使用教程

文章目录

  • pe43xx衰减器使用教程
    • 前言
    • 使用方法
      • 将下列代码加入用户文件
      • 投降了,太久不用全忘光了,印象中这个模块配置相当简单,到手即用的程度,感兴趣的将上述代码喂给AI问问用法吧。

前言

距离上次使用已经有段时间了,很多细节已经忘记,若本文有疏漏,还请多多包涵

使用方法

将下列代码加入用户文件

/**
  ******************************************************************************
  * @file           : pe43xx.c
  * @author         : Silencecmsj
  * @brief          : None
  * @attention      : None
  * @date           : 2024/7/31
  ******************************************************************************
  *                             _ooOoo_
  *                            o8888888o
  *                            88" . "88
  *                            (| -_- |)
  *                            O\  =  /O
  *                         ____/`---'\____
  *                       .'  \\|     |//  `.
  *                      /  \\|||  :  |||//  \
  *                     /  _||||| -:- |||||-  \
  *                     |   | \\\  -  /// |   |
  *                     | \_|  ''\---/''  |   |
  *                     \  .-\__  `-`  ___/-. /
  *                   ___`. .'  /--.--\  `. . __
  *                ."" '<  `.___\_<|>_/___.'  >'"".
  *               | | :  `- \`.;`\ _ /`;.`/ - ` : | |
  *               \  \ `-.   \_ __\ /__ _/   .-` /  /
  *          ======`-.____`-.___\_____/___.-`____.-'======
  *                             `=---='
  *          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ******************************************************************************
  */


#include "pe43xx.h"


uint8_t _type;
float _max;
float _step;
float _level;

//type写PE43xx (PE4302/PE4306/PE4312)

void PE43xx_f( uint8_t type) {
//	_pin_le = pin_le;
//	_pin_clock = pin_clock;
//	_pin_data = pin_data;
    _type = type;
}

void begin() {
    // set our internal max and step values
    switch (_type) {
        case PE4302:
        case PE4312:
            _max = 31.5;
            _step = 0.5;
            break;
        case PE4306:
            _max = 30;
            _step = 1;
            break;
        default:
                #warning type not certain, going with defaults, step=1 max=30
            _step = 1;
            _max = 30;
            break;
    }

    // set level to 0
    setLevel(0);
}

int setLevel(float level) {
    // bounds check
    if(level < 0 || level > getMax() ) {
        return 0;
    }

    _level = level;
    _writeLevel();

    return 1;
}

void _writeLevel() {

    // PE4302 and PE4312 wants something like this
    //
    // C16  C8  C4  C2  C1  C0.5  =>  result
    //  0    0   0   0   0    0   =>  0db
    //  0    0   0   0   0    1   =>  0.5db
    //  0    0   1   1   0    1   =>  6.5db
    //  1    1   1   1   1    1   => 31.5db

    // for PE4306 (which has only 1db resolution)
    //
    // C16  C8  C4  C2  C1  =>  result
    //  0    0   0   0   0  =>  0db
    //  0    0   0   0   1  =>  1db
    //  0    1   0   0   1  =>  9db
    //  1    1   1   1   1  => 31db

    // so the big different is that one can set the .5 bit or not

    // get the integer part, it will be the same for both chips
    int intlevel = _level;//_level==31.5...,int intlevel==31
    // default to 5 bits
    int bits = 5;

    // if our step is less than 1 the chip supports the 0.5 decimal
    if(_step < 1) {
        // one more bit
        bits = 6;

        // if the decimal is not 0 shift 1 into our level
        if( (_level*10 - intlevel*10) > 0) //有小数部分
        {
            intlevel = intlevel << 1;
//            bitWrite(intlevel, 0, 1);
            intlevel+=1;
        } else {
            intlevel = intlevel << 1;
//            bitWrite(intlevel, 0, 0);

        }
    }

    // LE and CLOCK down to get the chip listen
//    digitalWrite(_pin_le, LOW);
//    digitalWrite(_pin_clock,LOW);
    HAL_GPIO_WritePin(_pin_le_GPIO_Port, _pin_le_Pin, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(_pin_clock_GPIO_Port, _pin_clock_Pin, GPIO_PIN_RESET);
    // Write the level out MSB first
    int b;
    for (int bit = bits; bit > 0; bit--) {
        b = ((intlevel << 1) >> bit) & 0x01;

        HAL_GPIO_WritePin(_pin_data_GPIO_Port, _pin_data_Pin, b);
        HAL_GPIO_WritePin(_pin_clock_GPIO_Port, _pin_clock_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(_pin_clock_GPIO_Port, _pin_clock_Pin, GPIO_PIN_RESET);
    }

    // toggle LE to latch
//    digitalWrite(_pin_le, HIGH); // Toggle LE high to enable latch
//    digitalWrite(_pin_le, LOW);  // and then low again to hold it.
    HAL_GPIO_WritePin(_pin_le_GPIO_Port, _pin_le_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(_pin_le_GPIO_Port, _pin_le_Pin, GPIO_PIN_RESET);
}

// getters
float getLevel() {
    return _level;
}

float getMax() {
    return _max;
}

float getStep() {
    return _step;
}


//main调用函数
void PE43xx_init(uint8_t type,float level)//第一次用
{
    PE43xx_f(type);
    begin();
    setLevel(level);


}
void PE43xx_changelevel(float level)//非第一次用
{
    setLevel(level);

}

/**
  ******************************************************************************
  * @file           : pe43xx.h
  * @author         : Silencecmsj
  * @brief          : None
  * @attention      : None
  * @date           : 2024/7/31
  ******************************************************************************
  *                             _ooOoo_
  *                            o8888888o
  *                            88" . "88
  *                            (| -_- |)
  *                            O\  =  /O
  *                         ____/`---'\____
  *                       .'  \\|     |//  `.
  *                      /  \\|||  :  |||//  \
  *                     /  _||||| -:- |||||-  \
  *                     |   | \\\  -  /// |   |
  *                     | \_|  ''\---/''  |   |
  *                     \  .-\__  `-`  ___/-. /
  *                   ___`. .'  /--.--\  `. . __
  *                ."" '<  `.___\_<|>_/___.'  >'"".
  *               | | :  `- \`.;`\ _ /`;.`/ - ` : | |
  *               \  \ `-.   \_ __\ /__ _/   .-` /  /
  *          ======`-.____`-.___\_____/___.-`____.-'======
  *                             `=---='
  *          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ******************************************************************************
  */

#ifndef TEST_PE43XX_H
#define TEST_PE43XX_H


#include "main.h"
// Define types of sensors.
#define PE4302 02
// untested as I don't own these
#define PE4306 06
#define PE4312 12


void PE43xx_f( uint8_t type);
void begin();
int setLevel(float level);
void _writeLevel();
float getLevel();
float getMax();
float getStep();

void PE43xx_init(uint8_t type,float level);
void PE43xx_changelevel(float level);

#endif //TEST_PE43XX_H

投降了,太久不用全忘光了,印象中这个模块配置相当简单,到手即用的程度,感兴趣的将上述代码喂给AI问问用法吧。


http://www.kler.cn/a/372766.html

相关文章:

  • 一文讲明白大模型分布式逻辑(从GPU通信原语到Megatron、Deepspeed)
  • Jmeter实际应用
  • C++静态成员变量需要在类外进行定义和初始化-error LNK2001:无法解析的外部符号
  • 成本累计曲线:项目预算的秘密武器
  • 短视频矩阵系统源码开发分享/源代码部署/oem贴牌搭建分享
  • php处理文件上传的五种方式
  • 【大语言模型】ACL2024论文-03 MAGE: 现实环境下机器生成文本检测
  • 中阳智能量化交易系统:构建高效金融未来
  • 有序序列合并(c语言)
  • 【Android】使用TextView实现按钮开关代替Switch开关
  • 【业务】opaytap支付测试文档
  • cursor连接远程jupyter
  • ubuntu中安装使用Geph
  • 2024年【上海市安全员-C3证(专职安全员-综合类)】考试报名及上海市安全员-C3证(专职安全员-综合类)考试资料
  • 第J4周:ResNet与DenseNet结合探索
  • Docker常用命令汇总
  • win10 无法连接共享打印机 错误代码0x0000011b
  • YOLOv9模型重新参数化,将yolo.pt转为yolo-converted.pt
  • GetX在使用过程中一些问题
  • 计算机科学与技术-毕业设计选题推荐
  • Python OpenCV精讲系列 - 车牌识别的全方位指南(二十四)
  • 论文 | Ignore Previous Prompt: Attack Techniques For Language Models
  • 第二十三章 Vue组件通信之非父子组件通信
  • 【Linux】网络编程:初识协议,序列化与反序列化——基于json串实现,网络通信计算器中简单协议的实现、手写序列化与反序列化
  • 【Web前端】JavaScript 对象原型与继承机制
  • 「C/C++」C++ 三大特性 之 类和对象