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

如何做网站模特东莞寮步最新通知

如何做网站模特,东莞寮步最新通知,网站的建设技术有哪些,关键词推广公司【STM32 HAL库】IIC通信与CubeMX配置 前言理论IIC总线时序图IIC写数据IIC读数据 轮询模式CubeMX配置应用示例AHT20初始化初始化函数读取说明读取函数 中断模式CubeMX配置状态机图fsm.caht20.c DMA模式CubeMX配置代码 前言 本文为笔者学习 IIC 通信的总结#xff0c;基于keysk… 【STM32 HAL库】IIC通信与CubeMX配置 前言理论IIC总线时序图IIC写数据IIC读数据 轮询模式CubeMX配置应用示例AHT20初始化初始化函数读取说明读取函数 中断模式CubeMX配置状态机图fsm.caht20.c DMA模式CubeMX配置代码 前言 本文为笔者学习 IIC 通信的总结基于keysking的视频内容如有错误欢迎指正 理论 IIC总线时序图 IIC写数据 IIC读数据 通信流程以AHT20为例 STM32主机)发送 IIC 启动信号STM32 发送 AHT20(从机)地址AHT20 识别地址并发送 ACK 信号AHT20 发送数据至 STM32(发送完1 字节后结束STM32 发送 ACK 信号表示接收完成STM32重复接收下一个字节直至AHT20数据发送完成STM32 发送 IIC 结束信号 IIC vs 串口通信 IIC为半双工串口为全双工 IIC 可支持多设备通信: IIC通信为总线协议总线上每个从机都有唯一的地址主机IIC通信先发送从机地址非目标从机会忽略数据 同步通信: STM32 的晶振提供统一时钟源为IIC总线上的从机提供统一时钟信号尤其可为无晶振提供精确时钟信号的小型传感器提供精确的同步时钟信号 轮询模式CPU持续搬运数据程序执行被阻塞 中断模式CPU只在搬运数据时介入正常情况下不阻塞程序 DMA模式DMA自动搬运数据无需CPU介入节省资源 轮询模式 以AHT20温湿度传感器为例 CubeMX配置 应用示例 AHT20初始化 初始化函数 #include aht20.h #define AHT20_ADDRESS 0x70void AHT20_Init() {uint8_t readBuffer; //定义读缓冲器HAL_Delay(40); // 上电后等待40msHAL_I2C_Master_Receive(hi2c1, AHT20_ADDRESS, readBuffer, 1, HAL_MAX_DELAY); // 读取AHT20 1字节状态字 判断AHT20当前状态if ((readBuffer 0x08) 0x00) { // 检查状态字的 Bit[3] 是否为 1uint8_t sendBuffer[3] {0xBE, 0x08, 0x00}; // 初始化命令初始化指令初始化参数HAL_I2C_Master_Transmit(hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY); // 发送初始化命令} }ps 1.AHT20 地址定义为 0x70实际为 7 位地址左移 1 位后补 1 位用于区分读/写操作0 表示写1 表示读。 2.I²C 的发送与接收函数先发送从机地址待从机应答后再发送发送或接收请求。因此初始化函数中的接收操作是在发送 AHT20 地址后接收其状态字。 读取说明 AHT20数据存放形式 除去IIC硬件地址外一共6个字节的数据1字节状态字3.5字节湿度数据3.5字节温度数据 信号转换 读取函数 AHT20读取温湿度数据函数 void AHT20_Read(float *Temperature, float *Humidity) {uint8_t sendBuffer[3] { 0xAC, 0x33, 0x00 }; //发送缓冲区存放触发测量命令参数uint8_t readBuffer[6]; //定义接收缓冲区(6个字节6*8bits分别对应状态、湿度数据1、湿度数据2、湿度和温度数据3、温度数据4、温度数据5.共6字节HAL_I2C_Master_Transmit(hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY); //发送触发测量命令AHT20开始测量HAL_Delay(75);//等待75ms待测量完成HAL_I2C_Master_Receive(hi2c1, AHT20_ADDRESS, readBuffer, 6, HAL_MAX_DELAY);//判断状态字(readbuffer[0]的Bit[7]是否为0也即状态字的第八位(最高位)是否为0)if ((readBuffer[0] 0x80) 0x00) {uint32_t data 0; //32位data用来存放20位的湿度数据和温度数据// 计算湿度(位运算拼接数据)data ((uint32_t)readBuffer[3] 4) ((uint32_t)readBuffer[2] 4) ((uint32_t)readBuffer[1] 12);*Humidity data * 100.0f / (1 20); //相对湿度转换// 计算温度(位运算拼接数据)data (((uint32_t)readBuffer[3] 0x0F) 16) ((uint32_t)readBuffer[4] 8) (uint32_t)readBuffer[5];*Temperature data * 200.0f / (1 20) - 50; //温度转换} }中断模式 基本原理同串口的中断模式发送 但因为I2C通信协议的复杂性和多步骤的工作流程使得状态机成为管理I2C中断与DMA模式的有效手段 仅依赖发送和接收完成的中断嵌套没有标志位的参与也难以完成逻辑处理所以状态机是必须的 CubeMX配置 以AHT20温湿度传感器为例 状态机图 状态机标志位 // 0: 初始状态 发送测量命令 1: 正在发送测量命令 2: 测量命令发送完成 等待75毫秒后读取AHT20数据 3: 读取中 4: 读取完成 解析并展示数据然后恢复到初始状态 uint8_t aht20State 0; //定义并初始化aht20初始状态为初始状态fsm.c void fsm(void) {switch(aht20State)case 0: //向aht20发送测量命令并切换状态为发送中aht20_measure();aht20State 1;break;case 1: //发送中状态不执行任何操作待发送完成后在中断回调函数中切换状态break;case 2: //发送完成状态下延时75ms后发送获取aht20温湿度数据开始接收aht20的温湿度数据并切换状态为读取中HAL_Delay(75);aht20_get();aht20State 3;break;case 3: //读取中状态不执行任何操作待读取完成后在中断回调函数中切换状态break; case 4: //读取完成状态时进行aht20的温湿度数据解析并发送给上位机。延时1s后切换状态为初始状态AHT20_Analysis(temperature, humidity);sprintf(message, 温度: %.1f ℃, 湿度: %.1f %%\r\n, temperature, humidity);HAL_UART_Transmit(huart2, (uint8_t*)message, strlen(message), HAL_MAX_DELAY);HAL_Delay(1000);aht20State 0;break; }void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c) {if (hi2c hi2c1) {aht20State 2; //在发送完成中断中实现状态切换} }void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c) {if (hi2c hi2c1) {aht20State 4; //在接收完成中断中实现状态切换} }aht20.c 将AHT20的逻辑代码拆分为最基本的功能模块以便状态机在各个状态下执行相应任务 void aht20_measure() {static uint8_t sendBuffer[3] { 0xAC, 0x33, 0x00 };HAL_I2C_Master_Transmit_IT(hi2c1, AHT20_ADDRESS, sendBuffer, 3); }void aht20_get() {HAL_I2C_Master_Receive_IT(hi2c1, AHT20_ADDRESS, readBuffer, 6); }void aht20_analysis(float *Temperature, float *Humidity) {if ((readBuffer[0] 0x80) 0x00) {uint32_t data 0;data ((uint32_t)readBuffer[3] 4) ((uint32_t)readBuffer[2] 4) ((uint32_t)readBuffer[1] 12);*Humidity data * 100.0f / (1 20);data (((uint32_t)readBuffer[3] 0x0F) 16) ((uint32_t)readBuffer[4] 8) (uint32_t)readBuffer[5];*Temperature data * 200.0f / (1 20) - 50;} }DMA模式 CubeMX配置 代码 只需将上述I2C中断模式收发的函数改为DMA模式收发即可 也即 IT — DMA
http://www.w-s-a.com/news/937512/

相关文章:

  • 门户网站是指提供什么的网站网站优化需要工具
  • 和小男生做的网站代理公司注册步骤
  • 天猫网站建设的目标是什么seo有些什么关键词
  • 网站前端建设都需要什么莱芜信息港网页
  • 如何做360网站优化网站建设培训教程新手入门到精通
  • 做网站有的浏览器怎么做网站网站赚钱
  • 织梦 做网站 教程百度登录个人中心官网
  • ftp怎么修改网站wordpress分享积分
  • 营销策划方案的步骤西安关键词优化软件
  • 南宁自己的网站移动互联网技术学什么
  • 2017湖北建设教育协会网站自己接单做网站
  • 定制网站建设制作h5网站要多久
  • 泰安中呼网站建设有限公司 概况个人网站的设计与实现参考文献
  • 圣诞节网站怎么做怎么获取网站的图片
  • 想找个人做网站音乐网站建设教程视频教程
  • 网站收录一键提交阿里巴巴做网站多少钱
  • 怎么做网站投放广告商务网站建设实训报告
  • 服装代销的网站源码国内电子商务网站有哪些
  • qq空间怎么做网站做企业平台的网站有哪些
  • 网站的优缺点wordpress手机适配模板中文
  • 福州网站建设H5广告公司简介简短
  • 网站404页面的作用app开发郑州
  • 亚马逊中国网站建设目标网站建设的策划
  • 林州网站建设服务徐州网站建设
  • 如何检测网站死链景德镇网站建设哪家好
  • 旅游网站开发目标天津专业做网站公司
  • 名者观看网站快手小程序
  • 网络架构扁平化windows优化大师好不好
  • 安康养老院收费价格表兰州seo整站优化服务商
  • 网站开发技术方案模板无锡网站建设推荐