IIC模块
一、MCP4017
MCP4017 是一款由 Microchip Technology 公司生产的数字电位器。它是一种电子元件,通常用于调整电压、增益或信号强度,类似于传统的机械电位器,但可以通过数字控制来调节。
以下是 MCP4017 的一些主要特点:
- 数字电位器:MCP4017 是一个单通道的 7 位数字电位器,分辨率为 128 个不同的电阻值(2^7 = 128 步)。
- I²C 接口:它使用 I²C 通信协议进行控制,通过两个引脚(SCL 和 SDA)与主设备通信。I²C 是一种广泛使用的双线通信协议,适合用于低速设备。
- 低功耗:MCP4017 设计为低功耗设备,适合需要节能的应用场景。
- 电阻范围:MCP4017 提供了不同的电阻范围,常见的型号包括 5kΩ、10kΩ、50kΩ 和 100kΩ 等。用户可以通过 I²C 指令在这些范围内调节电阻值。
- 非易失性存储器:该器件不带非易失性存储器(EEPROM),因此每次上电后,电位器的默认设置是中间值(即 64/128 的位置)。
- 应用场景:MCP4017 常用于音频调节、信号处理、传感器校准等需要精确调节电阻的场合。
二、阅读芯片手册
I2C地址:0101111
三、Hal库API
四、CubeMX配置
RTC :
STM32 的 RTC(实时时钟)是集成在 STM32 微控制器中的一个外设,用于保持时间和日期信息,即使在主系统电源断电时也能继续工作。STM32 的 RTC 是独立的、低功耗的,可以通过外部备用电源(如纽扣电池)或内置备用电源来运行。
STM32 RTC 的主要功能:
- 实时时钟:提供年、月、日、星期、小时、分钟、秒的时间和日期计时功能。
- 闹钟功能:STM32 的 RTC 可以设置定时闹钟,在指定时间触发事件,常用于定时唤醒或触发任务。
- 时间戳:能够记录事件发生时的精确时间,例如在外部中断或特定事件发生时。
- 周期性唤醒:RTC 支持通过定时唤醒系统进入低功耗模式,如待机模式或休眠模式,帮助实现低功耗设计。
- 低功耗:RTC 在超低功耗模式下运行,可以使用独立的低速时钟源(如 LSE,外部 32.768 kHz 晶振)或内部低速时钟(LSI)。
RTC 的时钟源
STM32 的 RTC 通常依赖于一个低速的时钟源来保持准确的时间。常见的时钟源有:
- LSE (Low-Speed External):外部 32.768 kHz 晶振,精度高,适合精确计时。
- LSI (Low-Speed Internal):内部低速 RC 振荡器,功耗低,但精度较差。
常见应用场景:
- 电子钟表、日历:嵌入式系统中经常需要长时间保持准确时间的设备。
- 低功耗设计:通过 RTC 实现系统定时唤醒和进入低功耗模式,节省电池能量。
- 时间戳记录:在数据记录系统或日志系统中,RTC 用于标记数据生成的时间。
配置RTC
- Activate Clock Source:激活时钟源
- Activate Calendar:激活日历
配置时钟树
Asynchronous Predivider和Synchronous Predivider是用来分频的两个寄存器,RTC的时钟源(LSE、LSI或HSE/32)需要经过这些分频器后,才能提供给RTC时钟
- Asynchronous Predivider value:异步预分器值,125,通常用于降低功耗,
- Synchronous Predivider value:同步预分频器值,6000,用于精确调节RTC的计时
6000 x 125 = 750KHz,速度最快,精度最高
- 二进制
- 时、分、秒
五、编写底层驱动
1 |
|
1 |
|
HAL库源码
1.RTC数据类型
1 | /** |
2.RTC函数
1 | HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format) |
枚举类型:HAL_StatusTypeDef
typedef enum
{
HAL_OK = 0x00U,
HAL_ERROR = 0x01U,
HAL_BUSY = 0x02U,
HAL_TIMEOUT = 0x03U
} HAL_StatusTypeDef;Hal库封装的一个典型思想
多串口重定向-适合项目复用
1 | int my_printf(UART_HandleTypeDef *huart, const char *format, ...) { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Turin's Blog!