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

免费在线建站七星互联免费主机

免费在线建站,七星互联免费主机,怎么增加网站收录,专业柳州网站建设哪家便宜目录WM_SDK_W806_v0.6.0的库函数函数参数宏应用示例初始化使用测试I2C 控制器功能概述主要特性功能描述传输速率选择中断及启动停止可控快速输出及检测信号寄存器描述寄存器列表时钟分频寄存器_1时钟分频寄存器_2控制寄存器数据寄存器收发控制寄存器TXR 读出寄存器CR 读出寄存器… 目录WM_SDK_W806_v0.6.0的库函数函数参数宏应用示例初始化使用测试I2C 控制器功能概述主要特性功能描述传输速率选择中断及启动停止可控快速输出及检测信号寄存器描述寄存器列表时钟分频寄存器_1时钟分频寄存器_2控制寄存器数据寄存器收发控制寄存器TXR 读出寄存器CR 读出寄存器iosetting大佬 维护的wm-sdk-w806函数参数应用示例初始化引脚复用使用测试Windows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 摘自《W806 芯片设计指导书 V1.0》、《W806 MCU 芯片规格书 V2.0》、《WM_W800_寄存器手册 V2.1》 WM_SDK_W806_v0.6.0的库函数 我们打开wm_i2c.h有如下的函数声明 函数 HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c); //用于配置所用I2C的引脚HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c); //将初始化之后的I2C引脚恢复成默认的状态–各个寄存器复位时的值HAL_StatusTypeDef HAL_I2C_Write(I2C_HandleTypeDef *hi2c, uint8_t DevAddress, uint8_t MemAddress, uint8_t *pData, uint16_t Size); //用于向从器件某地址写入数据HAL_StatusTypeDef HAL_I2C_Read(I2C_HandleTypeDef *hi2c, uint8_t DevAddress, uint8_t MemAddress, uint8_t *pData, uint16_t Size); //用于由从器件某地址读取数据参数 结构体和枚举类型 typedef struct {GPIO_TypeDef *SCL_Port;uint32_t SCL_Pin;GPIO_TypeDef *SDA_Port;uint32_t SDA_Pin; } I2C_HandleTypeDef;宏 看着是不是有点怪 #define I2C_SDA_H(HANDLE) HAL_GPIO_WritePin(HANDLE-SDA_Port, HANDLE-SDA_Pin, GPIO_PIN_SET)#define I2C_SDA_L(HANDLE) HAL_GPIO_WritePin(HANDLE-SDA_Port, HANDLE-SDA_Pin, GPIO_PIN_RESET)#define I2C_SCL_H(HANDLE) HAL_GPIO_WritePin(HANDLE-SCL_Port, HANDLE-SCL_Pin, GPIO_PIN_SET)#define I2C_SCL_L(HANDLE) HAL_GPIO_WritePin(HANDLE-SCL_Port, HANDLE-SCL_Pin, GPIO_PIN_RESET)#define I2C_SDA_OUT(HANDLE) SET_BIT(HANDLE-SDA_Port-DIR, HANDLE-SDA_Pin)#define I2C_SDA_IN(HANDLE) CLEAR_BIT(HANDLE-SDA_Port-DIR, HANDLE-SDA_Pin)#define I2C_SDA_GET(HANDLE) HAL_GPIO_ReadPin(HANDLE-SDA_Port, HANDLE-SDA_Pin)应用示例 初始化 I2C_HandleTypeDef hi2c; //... static void I2C_Init(void); //... static void I2C_Init(void) {hi2c.SCL_Port GPIOA;hi2c.SCL_Pin GPIO_PIN_1;hi2c.SDA_Port GPIOA;hi2c.SDA_Pin GPIO_PIN_4;HAL_I2C_Init(hi2c); }使用 I2C_Init();//...HAL_I2C_Write(hi2c, DEVICE_ADDR, 地址, 数据缓冲区首地址, 数据长度);//...HAL_I2C_Read(hi2c, DEVICE_ADDR, 地址, 数据缓冲区首地址, 数据长度)测试 这里用的测试程序见【0.96寸 OLED屏实现1500Fps的帧率】STM32 软件、硬件SPI、I2C驱动总结 我们再打开wm_i2c.c 可以看到 WM_SDK_W806_v0.6.0 库函数里i2c的实现竟然是模拟i2c 但在数据手册中是有硬件i2c相关的描述的 I2C 控制器 功能概述 I2C 总线是一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。        主器件用于启动总线传送数据并产生时钟以开放传送的器件此时任何被寻址的器件均被认为是从器件在总线上主和从、发和收的关系不是恒定的而取决于此时数据传送方向。如果主机要发送数据给从器件则主机首先寻址从器件然后主动发送数据至从器件最后由主机终止数据传送如果主机要接收从器件的数据首先由主器件寻址从器件然后主机接收从器件发送的数据最后由主机终止接收过程。在这种情况下主机负责产生定时时钟和终止数据传送。 主要特性 APB 总线协议标准接口 只可作为主设备控制器使用 I2C 工作速率可配100KHz~400KHz 多路 GPIO 可复用成 I2C 的通信接口 可快速输出和检测时序信号 功能描述 传输速率选择 通过设置寄存器 PRERlo 和寄存器 PRERhi 就可以将 I2C 总线上的数据传输速率配置在 100KHz 到400KHz 之间的任意总线频率整数分频值。 中断及启动停止可控 通过设置寄存器 CTR 的 Bit6 允许或者禁止 I2C 控制器产生中断并且还可以通过设置 Bit7 来随时启动或者停止 I2C 控制器的工作。 快速输出及检测信号 通过设置寄存器 CR_SR 的相应位可以使控制器快速输出或者检测总线 START 信号总线 STOP 信号总线 ACK 信号总线 NACK 信号。在主模式下I2C 接口启动数据传输并生成时钟信号。 一个串行数据传输始终以启动信号开始以停止信号结束。一旦在总线上生成启动信号就选择了主设备模式。 寄存器描述 寄存器列表 时钟分频寄存器_1 时钟分频寄存器_2 控制寄存器 数据寄存器 收发控制寄存器 TXR 读出寄存器 CR 读出寄存器 iosetting大佬 维护的wm-sdk-w806 IOsetting的CSDN主页 git clone https://gitee.com/iosetting/wm-sdk-w806.git可以看到已有硬件I2C的实现 打开wm_i2c.h有如下声明 函数 HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c); //用于配置I2C接口的引脚、速率、优先级等HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c); //将初始化之后的I2C接口恢复成默认的状态–各个寄存器复位时的值void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c); //用于启用I2C时钟选择复用引脚void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c); //用于禁用I2C时钟将对应引脚恢复成默认的状态HAL_StatusTypeDef HAL_I2C_Write(I2C_HandleTypeDef *hi2c, uint8_t DevAddress, uint8_t MemAddress, uint8_t *pData, uint16_t Size); //用于向从器件某地址写入数据HAL_StatusTypeDef HAL_I2C_Read(I2C_HandleTypeDef *hi2c, uint8_t DevAddress, uint8_t MemAddress, uint8_t *pData, uint16_t Size); //用于由从器件某地址读取数据参数 结构体和枚举类型 typedef struct __I2C_HandleTypeDef {I2C_TypeDef *Instance; /*! I2C registers base address */uint32_t Frequency;HAL_LockTypeDef Lock; /*! Object lock */__IO uint32_t ErrorCode; /*! I2C Error code */ } I2C_HandleTypeDef;宏参数 #define I2C ((I2C_TypeDef *)I2C_BASE)应用示例 初始化 I2C_HandleTypeDef hi2c; #define DEVICE_ADDR 0xA0 //八位地址static void I2C_Init(void); static void GPIO_Init(void);//...static void I2C_Init(void) {hi2c.Instance I2C;hi2c.Frequency 400000;HAL_I2C_Init(hi2c); }static void GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0};__HAL_RCC_GPIO_CLK_ENABLE();GPIO_InitStruct.Pin GPIO_PIN_1;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT;GPIO_InitStruct.Pull GPIO_PULLUP;HAL_GPIO_Init(GPIOA, GPIO_InitStruct);GPIO_InitStruct.Pin GPIO_PIN_4;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT;GPIO_InitStruct.Pull GPIO_PULLUP;HAL_GPIO_Init(GPIOA, GPIO_InitStruct); }引脚复用 void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) {__HAL_RCC_I2C_CLK_ENABLE();__HAL_AFIO_REMAP_I2C_SCL(GPIOA, GPIO_PIN_1);__HAL_AFIO_REMAP_I2C_SDA(GPIOA, GPIO_PIN_4); }void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c) {__HAL_RCC_I2C_CLK_DISABLE();HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1);HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4); }使用 GPIO_Init();I2C_Init();//...HAL_I2C_Write(hi2c, DEVICE_ADDR, 地址, 数据缓冲区首地址, 数据长度);//...HAL_I2C_Read(hi2c, DEVICE_ADDR, 地址, 数据缓冲区首地址, 数据长度)测试 经过一晚上的测试我发现两个引脚存在互相干扰的现象已经严重影响正常通讯原因暂时未知 即使是使用 iosetting大佬的OLED Demo见联盛德 HLK-W806 (六): I2C驱动SSD1306 128x64 OLED液晶屏 —— IOsetting我也只在通讯速率为1MHz下能跑通 尽管我已在运行Demo前事先延时5s以跳过电平不稳定阶段 但在其他速率下仍难以通讯 400kHz: 100kHz:此情况下为完全黑屏
http://www.zqtcl.cn/news/766051/

相关文章:

  • 网络营销中自建网站建设局是干嘛的单位
  • 做网站的公司 贵阳流媒体网站建设
  • 北京建网站重庆安全建设工程信息网
  • 做公司网站的尺寸一般是多大无障碍浏览网站怎么做
  • 网站登陆界面psd手机一元云购网站建设
  • 网站规范化建设wordpress iis7.5 伪静态
  • 济南网站设计建设公司深圳seo外包公司
  • 重庆信息网站推广网站做推广如何设计二维码
  • 学历低的人不适合学编程小红书seo关键词优化多少钱
  • pc网站制作公司企业邮箱格式模板
  • 河南5G网站基站建设信息wordpress自定义文章页面模板下载
  • 宁波三优互动网站建设公司怎么样手机app商城
  • 散热器 东莞网站建设php模板源码
  • 怎么申请域名建网站凡科网站建设总结
  • 温州网站设计定制外贸人才网哪家最好
  • 永康门业微网站建设做一个网站要多长时间
  • 南山网站建设哪家好四川省微信网站建设公
  • 网件路由器做网站网站建设中 提示
  • 全运网站的建设徐州网络推广公司排名
  • 成品网站源码1688体验区南宁网络推广服务商
  • 广州品牌网站开发公司网站建设价位
  • 网站首页没排名但内页有排名wordpress网站收录插件
  • 在线相册jsp网站开发与设计微信小程序app下载
  • 广元市建设局网站首页网站建设首选公司哪家好
  • 商务网站建设策划思路平台网站如何做推广方案设计
  • 哈尔滨网站快速排名通辽网站建设
  • 雄安专业网站建设哪家好分销系统网站建设
  • 咨询行业网站开发wordpress5.0新版如何发布文章
  • 做网站要什么技术saas建站和开源建站的区别
  • 大型网站建设哪家服务好qq对话制作器app