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

网站截图可以做证据吗百度一下官方网

网站截图可以做证据吗,百度一下官方网,福州网络营销,电子产品营销策划书项目开源链接 github主页https://github.com/snqx-lqh本项目github地址https://github.com/snqx-lqh/STM32F103C8T6HalDemo作者 VXQinghua-Li7 📖 欢迎交流 如果开源的代码对你有帮助,希望可以帮我点个赞👍和收藏 项目说明 最近在做一个项目…

项目开源链接

github主页https://github.com/snqx-lqh
本项目github地址https://github.com/snqx-lqh/STM32F103C8T6HalDemo
作者 VXQinghua-Li7

📖 欢迎交流 如果开源的代码对你有帮助,希望可以帮我点个赞👍和收藏

项目说明

最近在做一个项目的时候,需要用到Max31850去读取PT100的温度值,使用的模块如下
在这里插入图片描述
由于店家给的资料只有Arduino的,然后我就把Arduino库中的OneWire库修改成了STM32可移植的C语言代码,使用函数指针面向对象设计,使得代码移植性更强。具体的操作以及演示我也有在B站进行讲解,DS18B20和MAX31850一样使用的单总线协议,所以可以共同使用这个代码。

【开源】STM32F103读取DS18B20温度(移植Arduino的OneWire库)

移植讲解

如果想要使用我移植好的OneWire库,首先需要修改u_one_wire.c文件开头的宏定义。需要用户提供延时微秒的函数,以及使能和失能单片机中断的函数。

#include "u_one_wire.h"/**************用户处理的区域*****************/
#include "delay.h"#define noInterrupts()         __disable_irq();  //失能单片机中断
#define interrupts()           __enable_irq();   //使能单片机中断
#define one_wire_delay_us      DWT_Delay_us
/********************************************/

然后在max_31850.c,也就是传感器处理文件中,建立一个one_wire的对象,并且实现对象中的方法。主要是设置引脚方向,引脚电平和读取引脚的电平,我这里由于是使用的HAL库,CubeMX将我的GPIO以及初始化了,所以这部分就不用管了,但是如果使用标准库的话,也要添加引脚初始化。

/***************    用户处理区域    ****************/#define max31850_delay_ms DWT_Delay_msstatic uint8_t gpio_init(void)
{return 0;
}static uint8_t set_pin_dir(one_wire_dir_t one_wire_dir)
{if(one_wire_dir == ONE_WIRE_DIR_IN){GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8<<(4*0);}else if(one_wire_dir == ONE_WIRE_DIR_OUT){GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=3<<(4*0);}return 0;
}static  uint8_t set_pin_level(uint8_t level)
{if(0 == level){GPIOA->BRR  = GPIO_PIN_0;}else if(1 == level){GPIOA->BSRR = GPIO_PIN_0;}return 0;
}static uint8_t read_pin_level(void)
{uint8_t read_pin ;read_pin = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);return read_pin;
}one_wire_dev_t max31850={.init = gpio_init,.set_pin_dir = set_pin_dir,.set_pin_level= set_pin_level,.read_pin_level= read_pin_level,
};/**********************************************************/

最后在使用的时候,就可以参考Arduino中的步骤,先要定义一个初始化的函数,然后开始地址扫描、校验、复位、选地址、转换、读取数据等一系列操作。

/*** @brief   初始化max31850,包含引脚初始化* @param   * @retval   **/
void max31850_init()
{one_wire_begin(&max31850);
}
/*** @brief   读取max31850的温度,带扫描地址* @param   celsius:摄氏度 fahrenheit:华氏温度* @retval  **/
int get_max31850_temp(float *celsius,float *fahrenheit)
{uint8_t i;uint8_t present = 0;uint8_t temptype;uint8_t data[12];uint8_t addr[8];if(celsius == NULL || fahrenheit == NULL)return -1;if ( !one_wire_search(&max31850,addr,true)) {one_wire_reset_search(&max31850);max31850_delay_ms(250);return -2;}if (crc8(addr, 7) != addr[7]) {return -3;}// the first ROM byte indicates which chipswitch (addr[0]) {case 0x10:temptype = TYPE_DS18S20;break;case 0x28:temptype = TYPE_DS18B20;break;case 0x22:temptype = TYPE_DS18S22;break;// ADDED SUPPORT FOR MAX31850!case 0x3B:temptype = TYPE_MAX31850;break;default:return -4;}one_wire_reset(&max31850);one_wire_select(&max31850,addr);one_wire_write(&max31850,0x44, 1);        // start conversion, with parasite power on at the endmax31850_delay_ms(1000);     // maybe 750ms is enough, maybe not// we might do a ds.depower() here, but the reset will take care of it.present = one_wire_reset(&max31850);one_wire_select(&max31850,addr);one_wire_write(&max31850,0xBE,0);         // Read Scratchpadfor ( i = 0; i < 9; i++) {           // we need 9 bytesone_wire_read(&max31850,&data[i]);}// Convert the data to actual temperature// because the result is a 16 bit signed integer, it should// be stored to an "int16_t" type, which is always 16 bits// even when compiled on a 32 bit processor.int16_t raw = (data[1] << 8) | data[0];if (temptype == TYPE_DS18S20) {raw = raw << 3; // 9 bit resolution defaultif (data[7] == 0x10) {// "count remain" gives full 12 bit resolutionraw = (raw & 0xFFF0) + 12 - data[6];}} else if (temptype == TYPE_MAX31850) {printf("--------------------------------\r\n");if (raw & 0x01) {return -4;}} else {uint8_t cfg = (data[4] & 0x60);// at lower res, the low bits are undefined, so let's zero themif (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 mselse if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 mselse if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms default is 12 bit resolution, 750 ms conversion time}*celsius = (float)raw / 16.0;*fahrenheit = *celsius * 1.8 + 32.0;return 0;
}

还可以跳过扫描阶段,直接获取数据,这种方式比较适合单节点的获取。就是电路上只连接了一个DS18B20或者MAX31850。

/*** @brief   读取max31850的温度,跳过地址扫描* @param   celsius:摄氏度 fahrenheit:华氏温度* @retval  **/
int get_max31850_temp_skiprom(float *celsius,float *fahrenheit)
{uint8_t i;uint8_t present = 0;uint8_t temptype;uint8_t data[12];uint8_t addr[8];if(celsius == NULL || fahrenheit == NULL)return -1;one_wire_reset(&max31850);one_wire_skip(&max31850);one_wire_write(&max31850,0x44, 1);        // start conversion, with parasite power on at the endmax31850_delay_ms(1000);     // maybe 750ms is enough, maybe not// we might do a ds.depower() here, but the reset will take care of it.present = one_wire_reset(&max31850);one_wire_skip(&max31850);one_wire_write(&max31850,0xBE,0);         // Read Scratchpadfor ( i = 0; i < 9; i++) {                // we need 9 bytesone_wire_read(&max31850,&data[i]);}int16_t raw = (data[1] << 8) | data[0];if (raw & 0x01) {return -4;}*celsius = (float)raw / 16.0;*fahrenheit = *celsius * 1.8 + 32.0;return 0;
}
http://www.dtcms.com/wzjs/224871.html

相关文章:

  • 学校网站制作价格网盘资源共享网站
  • 西峡微网站建设迅雷磁力链bt磁力天堂下载
  • 杭州高端网站建设网络营销试卷及答案
  • 手机asp网站开发工具做网络推广为什么会被抓
  • 怎么做兼职网站吗如何优化企业网站
  • ai智能建站优化seo软件
  • 佛山服务类网站建设杭州专业seo公司
  • 网站设计类型网站开发语言
  • 郑州治疗精神病哪家好百度seo优化及推广
  • 大学国际化网站建设淘词神器
  • 做众筹网站有哪些收录提交入口网址
  • 企业网站模板文件管理怎样建立一个自己的网站
  • 卢湾网站品牌整合营销方案
  • 怎么用网站源码做网站今天的新闻有哪些
  • 用中文版wordpress建英文站求个网站
  • 现在的网站推广是怎么做的搜索推广代运营
  • 最有效的网站推广设计沈阳专业seo关键词优化
  • 电子项目外包网站广东企业网站seo哪里好
  • 京东网站建设目标南宁网站推广排名
  • wordpress表白模板windows优化大师的功能
  • 响应式网站用什么单位苏州seo关键词优化价格
  • 网站怎么做跳转安全seo优化自学
  • 网站设计与网站建设网站开发是做什么的
  • 网站开发 报价单网站批量查询
  • 官方传奇手游下载汕头seo管理
  • 交友网站设计网站百度推广
  • 自己怎么做响应式网站吸引人气的营销方案
  • 网上做任务赚钱的网站优化大师最新版本
  • 长宁网站制作怎么做网站卖产品
  • 深圳建网360seo