STM32F103硬件IIC对MPR121的初始化
关于MPR121,论坛可用的资料太少,大量的都是要花C币下载的资源。作为菜鸟,搞来搞去主要就是初始化配置棘手,主要就是可配置的寄存器实在太多了。根据官方MPR技术文档及网页搜索一些信息得出以下初始化函数,实测采用3mm亚克力板稳定可用。
说明:芯片为STM32F103C8T6,采用硬件IIC,管脚定义:
PB6=SCL
PB7=SDA
PB8=IRQ,中断输出。
我在IIC总线上还接了一个OLED屏。需要特别注意的是,OLED屏和MPR121对硬件IIC都有速度要求,实测必须在240K~290K之间才能正常运行,太快OLED屏会死机,太慢MPR121会死机。
MPR初始化函数如下:
void MPR121_Init(void)
{
//复位 MPR121
MPR121Write(0x80, 0x63); //软复位,官方指定写入0x63值。
MPR121Write(0x5E, 0x00); //停止模式
// Section A // 该组控制过滤。 data is > baseline.
MPR121Write(MHD_R, 0x01);
MPR121Write(NHD_R, 0x01);
MPR121Write(NCL_R, 0x00);
MPR121Write(FDL_R, 0x00);
// Section B // 该组控制过滤。data is < baseline.
MPR121Write(MHD_F, 0x01);
MPR121Write(NHD_F, 0x01);
MPR121Write(NCL_F, 0xFF);
MPR121Write(FDL_F, 0x00);
//基线过滤控制寄存器
MPR121Write(0x33, 0x00); //noise half delta touched
MPR121Write(0x34, 0x00); //noise counts touched
MPR121Write(0x35, 0x00); //filter delay touched
MPR121Write(0x36, 0x0F);
MPR121Write(0x37, 0x0F);
MPR121Write(0x38, 0x00);
MPR121Write(0x39, 0x00);
MPR121Write(0x3A, 0x01);
MPR121Write(0x3B, 0x01);
MPR121Write(0x3C, 0xFF);
MPR121Write(0x3D, 0xFF);
MPR121Write(0x3E, 0x00);
MPR121Write(0x3F, 0x00);
MPR121Write(0x40, 0x00);
// Section C // 该组为每个电极设置触摸和释放阈值
MPR121Write(ELE0_T, TOU_THRESH);
MPR121Write(ELE0_R, REL_THRESH);
MPR121Write(ELE1_T, TOU_THRESH);
MPR121Write(ELE1_R, REL_THRESH);
MPR121Write(ELE2_T, TOU_THRESH);
MPR121Write(ELE2_R, REL_THRESH);
MPR121Write(ELE3_T, TOU_THRESH);
MPR121Write(ELE3_R, REL_THRESH);
MPR121Write(ELE4_T, TOU_THRESH);
MPR121Write(ELE4_R, REL_THRESH);
MPR121Write(ELE5_T, TOU_THRESH);
MPR121Write(ELE5_R, REL_THRESH);
MPR121Write(ELE6_T, TOU_THRESH);
MPR121Write(ELE6_R, REL_THRESH);
MPR121Write(ELE7_T, TOU_THRESH);
MPR121Write(ELE7_R, REL_THRESH);
MPR121Write(ELE8_T, TOU_THRESH);
MPR121Write(ELE8_R, REL_THRESH);
MPR121Write(ELE9_T, TOU_THRESH);
MPR121Write(ELE9_R, REL_THRESH);
MPR121Write(ELE10_T, TOU_THRESH);
MPR121Write(ELE10_R, REL_THRESH);
MPR121Write(ELE11_T, TOU_THRESH);
MPR121Write(ELE11_R, REL_THRESH);
MPR121Write(0x59, 0x02);
MPR121Write(0x5A, 0x01);
MPR121Write(0x5B, 0x00);
MPR121Write(0x5C, 0x10);
MPR121Write(0x5D, 0x24);
// 启用自动配置和自动重新配置
MPR121Write(0x7B, 0x0B);
MPR121Write(0x7D, 0xC8);
MPR121Write(0x7E, 0x82);
MPR121Write(0x7F, 0xB4);
//电极配置(重要)
MPR121Write(0x5E, 0xBC);//1011,1100。启用基线跟踪,启用接近检测,启用所有12个电极
}
MPR121.H文件主内容:
#define MPR121_ADD 0xB4 //(相当于0x5A<<1)将ADDR引脚连接到VSS、VDD、SDA或SCL线,得到的I2C地址分别为0x5A、0x5B、0x5C和0x5D//本例 ADDR引脚接地,故地址是0x5A
// MPR121 寄存器定义
#define MHD_R 0x2B
#define NHD_R 0x2C
#define NCL_R 0x2D
#define FDL_R 0x2E
#define MHD_F 0x2F
#define NHD_F 0x30
#define NCL_F 0x31
#define FDL_F 0x32
#define ELE0_T 0x41
#define ELE0_R 0x42
#define ELE1_T 0x43
#define ELE1_R 0x44
#define ELE2_T 0x45
#define ELE2_R 0x46
#define ELE3_T 0x47
#define ELE3_R 0x48
#define ELE4_T 0x49
#define ELE4_R 0x4A
#define ELE5_T 0x4B
#define ELE5_R 0x4C
#define ELE6_T 0x4D
#define ELE6_R 0x4E
#define ELE7_T 0x4F
#define ELE7_R 0x50
#define ELE8_T 0x51
#define ELE8_R 0x52
#define ELE9_T 0x53
#define ELE9_R 0x54
#define ELE10_T 0x55
#define ELE10_R 0x56
#define ELE11_T 0x57
#define ELE11_R 0x58
#define FIL_CFG 0x5D
#define ELE_CFG 0x5E
#define GPIO_CTRL0 0x73
#define GPIO_CTRL1 0x74
#define GPIO_DATA 0x75
#define GPIO_DIR 0x76
#define GPIO_EN 0x77
#define GPIO_SET 0x78
#define GPIO_CLEAR 0x79
#define GPIO_TOGGLE 0x7A
#define ATO_CFG0 0x7B
#define ATO_CFGU 0x7D
#define ATO_CFGL 0x7E
#define ATO_CFGT 0x7F
// 全局常数(实测“3/2”参数适用3mm有机玻璃板)
#define TOU_THRESH 3 //触摸阈值 0x0F 10//15//30//10//3
#define REL_THRESH 2 //释放阈值 0x0A 08//08//25//08//2
STM32F103硬件IIC对MPR121的初始化相关推荐
- 基于Stm32f103硬件iic驱动LM75A温度传感器
这是LM75A温度传感器的概述,本文主要介绍基于Stm32f103的硬件iic驱动LM75A温度传感器. 这是我所使用的硬件电路,很简单. 对于该传感器的使用,主要是读取温度值,查看数据手册我们知道需 ...
- STM32F103使用硬件IIC驱动SHT30温湿度传感器
文章目录 前言 一.SHT30温湿度传感器原理图 二.代码部分 1.SHT30.c文件 2.SHT30.h文件 总结 前言 SHT30是一种常见的温湿度传感器,该传感器广泛应用于各种场景,小米的温湿度 ...
- STM32 驱动 GY-302 光照传感器 BH1750 模块(软件IIC与硬件IIC驱动)
1.特别说明 要是不想看原理和过程,直接下拉找代码吧,都是测试过的,很稳定,有硬件I2C驱动的,也有软件模拟I2C驱动的,基于STM32F103系列和STM32F4系列实现,基于标准库实现,条理清 ...
- 【国货之光】GD32E230F4使用硬件IIC+DMA读写24C04
在很久很久以前,我就写过GD32E230替换STM32F031的帖子,主要介绍了USART和SPI的外设移植开发,当时IIC使用的是软件i2c,没有介绍的价值.在使用IIC时,大多数我们都是采用软件的 ...
- STM32H7系列使用硬件IIC读写EEPROM(HAL库配置源码)
记得在使用STM32F103系列时,好多人说其硬件IIC通讯不稳定.后来我们用到了STM32H743的单片机,使用了其硬件IIC对EEPROM进行读写.硬件IIC使用并不麻烦,而且相比于I/O模拟的I ...
- STM32使用IIC总线通讯协议在OLED屏幕上显示字符串、汉字、图像(硬件IIC)
参考:基于STM32-Oled(IIC)的使用 作者:奋斗的小殷 发布时间: 2021-05-07 13:09:26 网址:https://blog.csdn.net/boybs/article/de ...
- STM32 HAL 硬件IIC+DMA+简单图形库控制OLED
目录 前言 一.建立工程 二.编写和移植 前期准备 驱动部分修改 三.使用和验证 结论 (2022年1月22日重制)本文主要是移植带简单图形库的程序,如果只是实现DMA控制,建议看[0.96寸 OLE ...
- MSP430杂谈--AD7745硬件IIC驱动与模拟IIC驱动
和上一篇AD7793类似,项目中也涉及到利用AD7745读取电容值,来测环境湿度.编写了基于MSP430的AD7745的硬件IIC驱动和模拟IIC驱动,分享给大家. AD7745硬件IIC驱动完整版下 ...
- 【STM32】CubeMX+HAL库之 硬件IIC+DMA控制OLED(兼容SSD1306SH1106驱动)
[STM32]CubeMX+HAL库之 硬件IIC+DMA控制1.3寸OLED 前言 目前网上大多数驱动OLED屏都采用软件IIC,因为HAL库的升级使得硬件IIC的稳定性得到了保障,所以想采用硬件I ...
最新文章
- java序列化的作用
- 20155201 网络攻防技术 实验六 信息搜集与漏洞
- PHP生成静态HTML的源代码及用法
- 【287】◀▶ arcpy 常用类说明
- python模块之paramiko学习二
- Andorid之Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法总结
- Asterisk权威指南/第三章 安装Asterisk
- “阿里巴巴小程序繁星计划”:20亿扶持200万小程序开发者和100万商家
- 强化学习ppt_强化学习和最优控制的十个关键点81页PPT汇总
- 编写MR代码中,JAVA注意事项
- python画条形图-python使用Matplotlib画条形图
- Java ME游戏编程_Java ME游戏编程(第2版)
- L2TP详解(六)——L2TP排错、使用限制和注意事项
- 面试题38 数字在排序数组中出现的次数
- redis下载安装教程
- stm32cubeMx---DCMI 配置与使用
- pcr扩增的原理和步骤
- php如何实时显示弹幕,斗鱼弹幕 PHP 实现
- 移动硬盘插入提示需要格式化RAW_移动硬盘怎么分区,硬盘分区教程学习
- Layabox引擎开发H5打地鼠游戏(一)