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

有谁做彩票网站专业放心关键词优化参考价格

有谁做彩票网站,专业放心关键词优化参考价格,企业公众号开发,微信网站制作GPIO模拟I2C驱动的通用代码#xff0c;I2C的寄存器地址有8位和16位的#xff0c;主要解决了同一个MCU同时处理8位和16位寄存器地址芯片时候的驱动问题。 typedef enum {IIC_8BIT_BASE_ADDR,IIC_16BIT_BASE_ADDR }iic_bits_e; typedef struct {uint8_t DevAddr;uint16_t RegA…GPIO模拟I2C驱动的通用代码I2C的寄存器地址有8位和16位的主要解决了同一个MCU同时处理8位和16位寄存器地址芯片时候的驱动问题。 typedef enum {IIC_8BIT_BASE_ADDR,IIC_16BIT_BASE_ADDR }iic_bits_e; typedef struct {uint8_t DevAddr;uint16_t RegAddr;uint8_t data_len;uint8_t * data_buf;uint8_t bit_flag;uint16_t delay; }iic_param_t; 以上是结构体作为参数其中DevAddr是芯片地址RegAddr是寄存器地址data_len是写入或者读取的数据长度data_buf是写入或者读出的数据缓冲区bit_flag是寄存器位数IIC_8BIT_BASE_ADDR是8位IIC_16BIT_BASE_ADDR是16位。delay是根据需求读写数据时候的延时。根据芯片需求填写用不到就填0 下面是用法 写8bit寄存器 void bq27426_write_data(uint16_t reg, uint8_t * buf, uint8_t len) {iic_param_t bq27426 {BQ27426_DEV_ADDR,0,0,NULL,IIC_8BIT_BASE_ADDR,30};bq27426.RegAddr reg;bq27426.data_buf buf;bq27426.data_len len;simulate_i2c_writeblock(bq27426);} 写16bit寄存器 void cypd3176_write_data(uint16_t reg, uint8_t * buf, uint8_t len) {iic_param_t cypd3176 {CYPD3176_DEV_ADDR,0,0,NULL,IIC_16BIT_BASE_ADDR,0};cypd3176.RegAddr reg;cypd3176.data_buf buf;cypd3176.data_len len;simulate_i2c_writeblock(cypd3176); } 读8bit寄存器 void bq27426_read_data(uint16_t reg, uint8_t * buf, uint8_t len) {iic_param_t bq27426 {BQ27426_DEV_ADDR,0,0,NULL,IIC_8BIT_BASE_ADDR,30};bq27426.RegAddr reg;bq27426.data_buf buf;bq27426.data_len len;simulate_i2c_readblock(bq27426);} 读16bit寄存器 void cypd3176_read_data(uint16_t reg, uint8_t * buf, uint8_t len) {iic_param_t cypd3176 {CYPD3176_DEV_ADDR,0,0,NULL,IIC_16BIT_BASE_ADDR,0};cypd3176.RegAddr reg;cypd3176.data_buf buf;cypd3176.data_len len;simulate_i2c_readblock(cypd3176); } 下面是源码 #include stdio.h #include simulate.h#define PORT_I2C_SCL GPIOB #define PIN_I2C_SCL GPIO_Pin_6#define PORT_I2C_SDA GPIOB #define PIN_I2C_SDA GPIO_Pin_7#define simulate_IIC_SCL PBout(6) #define simulate_IIC_SDA PBout(7) #define simulate_READ_SDA PBin(7) static void i2c_Delay(void); static void i2c_PinModeOutput(void); static void i2c_PinModeInput(void); static void i2c_SCL(uint8_t stat); static void i2c_SDA(uint8_t stat); static uint8_t i2c_ReadSDA(void); static void i2c_Stop(void);iic_param_t simulate {simulate_ADDR,0,0,NULL,IIC_16BIT_BASE_ADDR,0 };static void i2c_Delay(void) {unsigned char t 3;while (t--); }static void i2c_PinModeOutput(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // ʹA˿ʱGPIO_InitStructure.GPIO_Pin PIN_I2C_SDA;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; // GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; // ٶ50MHzGPIO_Init(PORT_I2C_SDA, GPIO_InitStructure); // ʼPA0,1 }static void i2c_PinModeInput(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // ʹA˿ʱGPIO_InitStructure.GPIO_Pin PIN_I2C_SDA;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU; // GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; // ٶ50MHzGPIO_Init(PORT_I2C_SDA, GPIO_InitStructure); // ʼPA0,1 }static void i2c_SCL(uint8_t stat) {if (stat){simulate_IIC_SCL 1;}else{simulate_IIC_SCL 0;} }static void i2c_SDA(uint8_t stat) {if (stat){simulate_IIC_SDA 1;}else{simulate_IIC_SDA 0;} }static uint8_t i2c_ReadSDA(void) {if (simulate_READ_SDA){return 1;}else{return 0;} }void i2c_Start(void) {i2c_PinModeOutput();i2c_SDA(1);i2c_Delay();i2c_SCL(1);i2c_Delay();i2c_SDA(0);i2c_Delay();i2c_SCL(0);i2c_Delay(); }void i2c_Stop(void) {i2c_PinModeOutput();i2c_SCL(0);i2c_SDA(0);i2c_Delay();i2c_SCL(1);i2c_Delay();i2c_SDA(1);i2c_Delay(); }void i2c_WriteByte(uint8_t _ucByte) {uint8_t i;i2c_PinModeOutput();i2c_SCL(0);i2c_Delay();for (i 0; i 8; i){if (_ucByte 0x80){i2c_SDA(1);}else{i2c_SDA(0);}_ucByte _ucByte 1;i2c_SCL(1);i2c_Delay();i2c_SCL(0);i2c_Delay();}i2c_SDA(1); }uint8_t i2c_ReadByte(void) {uint8_t i;uint8_t recv 0;i2c_PinModeOutput();i2c_SDA(1);i2c_Delay();i2c_PinModeInput();for (i 0; i 8; i){recv recv 1;i2c_SCL(1);i2c_Delay();if (i2c_ReadSDA()){recv | 0x01;}else{recv | 0x00;}i2c_SCL(0);i2c_Delay();}return recv; }void i2c_Ack(void) {i2c_PinModeOutput();i2c_SCL(0);i2c_SDA(0);i2c_Delay();i2c_SCL(1);i2c_Delay();i2c_SCL(0); }void i2c_NAck(void) {i2c_PinModeOutput();i2c_SCL(0);i2c_SDA(1);i2c_Delay();i2c_SCL(1);i2c_Delay();i2c_SCL(0); }uint8_t i2c_CheckAck(void) {uint8_t time 0;i2c_PinModeOutput();i2c_SDA(1);i2c_Delay();i2c_SCL(1);i2c_Delay();i2c_PinModeInput();while (i2c_ReadSDA()){time;if (time 100){return 1;}}i2c_SCL(0);return 0; }#define I2C_WR 0x00 #define I2C_RD 0x01 #define ACK 0 #define NOACK 1void simulate_i2c_init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStructure); GPIO_SetBits(GPIOB, GPIO_Pin_6 | GPIO_Pin_7); }uint8_t iic_chip_select(iic_param_t *param, uint8_t rw_flag) {uint16_t i 0;if (param-data_len 40){return 0xf1;}if (param-data_buf NULL){return 0xF2;}for (i 0; i 3; i){i2c_Start();i2c_WriteByte((param-DevAddr 1) | rw_flag); if (i2c_CheckAck() ACK){break;}}if (i 3){i2c_Stop();return 0xf1;}return 0; }uint8_t simulate_i2c_writeblock(iic_param_t *param) {uint16_t i;if (0 ! iic_chip_select(param, I2C_WR)){return 0xF1;}if (IIC_16BIT_BASE_ADDR param-bit_flag){i2c_WriteByte((param-RegAddr 0xFF00) 8);if (i2c_CheckAck() NOACK){i2c_Stop();return 0xf7;}}i2c_WriteByte(param-RegAddr 0x00FF);if (i2c_CheckAck() NOACK){i2c_Stop();return 0xf3;}for (i 0; i param-data_len; i){i2c_WriteByte(param-data_buf[i]);if (i2c_CheckAck() NOACK){i2c_Stop();return 0xf4;}}i2c_Stop();for (i 0; i 100; i){i2c_Delay();}return 0; }uint8_t simulate_i2c_readblock(iic_param_t *param) {uint16_t i;int16_t j;if (0 ! iic_chip_select(param, I2C_WR)){return 0xF1;}/* 发送地址 */if (IIC_16BIT_BASE_ADDR param-bit_flag){i2c_WriteByte((param-RegAddr 0xFF00) 8);if (i2c_CheckAck() NOACK){i2c_Stop();return 0xf7;}}i2c_WriteByte(param-RegAddr 0x00FF);if (i2c_CheckAck() NOACK){i2c_Stop();return 0xf8;}if (0 ! iic_chip_select(param, I2C_RD)){return 0xF1;}for (i 0; i param-data_len - 1; i){for (j 0; j param-delay; j){i2c_Delay();}param-data_buf[i] i2c_ReadByte();for (j 0; j param-delay; j){i2c_Delay();}i2c_Ack();}for (j 0; j param-delay; j){i2c_Delay();}param-data_buf[param-data_len - 1] i2c_ReadByte();i2c_NAck();i2c_Stop();return 0; } #ifndef __IIC_DRIVER_H__ #define __IIC_DRIVER_H__#include sys.h #include stdlib.h #define simulate_ADDR (0x5F)typedef enum {IIC_8BIT_BASE_ADDR,IIC_16BIT_BASE_ADDR }iic_bits_e; typedef struct {uint8_t DevAddr;uint16_t RegAddr;uint8_t data_len;uint8_t * data_buf;uint8_t bit_flag;uint16_t delay; }iic_param_t;void simulate_i2c_init(void); uint8_t simulate_i2c_readblock(iic_param_t * param); uint8_t simulate_i2c_writeblock(iic_param_t * param);#endif 如果找不到PBout可用下面的头文件其他平台可以自己实现设置管脚的输入和输出模式替换掉文中的PBout PBin的接口 /* Includes ------------------------------------------------------------------*/ #ifndef __SYS_H #define __SYS_H #include stm32f10x.h#define BITBAND(addr, bitnum) ((addr 0xF0000000)0x2000000((addr 0xFFFFF)5)(bitnum2)) #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))#define GPIOA_ODR_Addr (GPIOA_BASE12) //0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE12) //0x40010C0C #define GPIOC_ODR_Addr (GPIOC_BASE12) //0x4001100C #define GPIOD_ODR_Addr (GPIOD_BASE12) //0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE12) //0x4001180C #define GPIOF_ODR_Addr (GPIOF_BASE12) //0x40011A0C #define GPIOG_ODR_Addr (GPIOG_BASE12) //0x40011E0C #define GPIOA_IDR_Addr (GPIOA_BASE8) //0x40010808 #define GPIOB_IDR_Addr (GPIOB_BASE8) //0x40010C08 #define GPIOC_IDR_Addr (GPIOC_BASE8) //0x40011008 #define GPIOD_IDR_Addr (GPIOD_BASE8) //0x40011408 #define GPIOE_IDR_Addr (GPIOE_BASE8) //0x40011808 #define GPIOF_IDR_Addr (GPIOF_BASE8) //0x40011A08 #define GPIOG_IDR_Addr (GPIOG_BASE8) //0x40011E08 #define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) #define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n)#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) #define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n)#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) #define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n)#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) #define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) #define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) #define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n)#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) #define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) #define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) #define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) #endif
http://www.zqtcl.cn/news/746702/

相关文章:

  • 网站副标题怎么写杭州抖音代运营
  • 网站建设基本资料网站数据库连接出错
  • 娄底网站开发温州seo排名公司
  • 成都有哪些网站开发公司最新网推项目
  • 分享公众号的网站小型企业类网站开发公司
  • 青岛网站建设方案案例wordpress主题模板 国人
  • 哪家高端网站建设好贷款织梦网站模板
  • 北京网站建设公司价格最近中文字幕2018免费版2019
  • 帮人做设计的网站自己怎么做新闻开头视频网站
  • 网站开发搜索功能中国建设银行ie下载网站
  • 中山网站建设 骏域网站的形式有哪些
  • 深圳企业网站重庆建站塔山双喜
  • 征婚网站 女 做茶叶生意企业网站推广服务协议
  • 安徽省住房城乡建设厅网站官网英语机构网站建设方案
  • 电商建站价格深圳龙岗建站公司
  • 可以下载源程序的网站.htaccess wordpress
  • 国内优秀设计网站小程序推广方案
  • 网站构建是什么意思怎么做网站盗号
  • 学校网站建设行业现状wordpress怎么保存图片
  • 网站 框架网页建设title:(网站建设)
  • 素材网站推广方案安卓端开发
  • 网站制作可以询价么168推广
  • 河南城乡和住房建设厅网站网络营销的主要特点有哪些
  • 哪些网站可以做自媒体wordpress 左侧
  • joomla! 1.5 网站建设基础教程丹阳网站推广
  • 中国建设银行山东省分行网站怎么做网站制作
  • 网站前台设计方案自助建站一般适用于大型电子商务网站建设
  • 建设银行不良资产处置网站wordpress啥时候出现的
  • 出口贸易网站网站建设及解决方案
  • 网站服务器要求做网站需要的服务器