DAY8-RTC编程,IIC实现eeprom访问

137 阅读3分钟

练习:

设置RTC,读取日期和时间打印出来,验证断电后时间是否还在

添加一个蓝牙命令,读取当前日期时间

5.RTC的闹钟配置

//关闭RTC寄存器写保护

(1)关闭闹钟

RTC_AlarmCmd(RTC_Alarm_A, DISABLE);

(2)设置闹钟参数

void RTC_SetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct);
参数:
    RTC_Format - 日期格式 RTC_Format_BCD
    RTC_Alarm - 哪个闹钟 RTC_Alarm_A
    RTC_AlarmStruct - 闹钟参数结构
    
typedef struct
{
  RTC_TimeTypeDef RTC_AlarmTime;     /*!< 闹钟时间 */uint32_t RTC_AlarmMask;            /*!< 闹钟时间掩码 @ref RTC_AlarmMask_Definitions */uint32_t RTC_AlarmDateWeekDaySel;  /*!< 日期/星期选择 @ref RTC_AlarmDateWeekDay_Definitions */
  
  uint8_t RTC_AlarmDateWeekDay;      /*!< 日期 1-31 range.
                                          星期 @ref RTC_WeekDay_Definitions */
}RTC_AlarmTypeDef;    

(3)清除中断标志

RTC_ClearITPendingBit(RTC_IT_ALRA);

(4)使能闹钟A中断

RTC_ITConfig(RTC_IT_ALRA, ENABLE);

(5)外部中断初始化

0

EXTI_Init(...);

(6)初始化NVIC

NVIC_Init(...);

(7)启动闹钟

RTC_AlarmCmd(RTC_Alarm_A, ENABLE);

(8)实现RTC闹钟中断处理函数

void RTC_Alarm_IRQHandler(void)
{
    //清除闹钟中断标志
    RTC_ClearITPendingBit(RTC_IT_ALRA);
    //清除外部中断标志
    EXTI_ClearITPendingBit(EXTI_Line17);
}

练习:

修改闹钟时间掩码,测试闹钟触发情况

二十三.IIC

1.概念

IIC(I2C)是一种串行的通信方式,属于两线式的半双工,飞利浦公司发明的用于连接微控制器和外部设备的一种总线。

IIC由数据线(SDA)和时钟线(SCL)构成总线,可以在CPU和外设之间实现数据的双向传输,传输速度100K ~ 400K bps

2.物理连接

0

IIC属于一主多从(Master-Slave)的传输模式,主设备一般都是CPU,IIC总线的传输永远由主设备发起,从设备被动响应。IIC通信中使用从设备地址来区分不同的从设备。IIC传输一次传输1字节。

IIC外设和开发板连接一般都是4根线,VCC GND SCL SDA

3.IIC通信协议

SCL和SDA默认高电平,表示总线空闲

(1)起始信号 ------- 开始通信

保持SCL为高电平,SDA从高向低跳变

(2)停止型号 ------ 结束通信

保持SCL为高电平,SDA从低向高跳变

0

(3)应答信号(ACK)

在发送完一个字节之后的第9个时钟周期由接收者控制数据线进行应答(低电平表示有效应答,高电平表示无效应答)。

(4)数据传输

数据的接收者在SCL为高电平读取SDA的电平作为该位数据,因此在SCL为高电平时SDA要保持电平稳定,在SCL为低电平时改变SDA。

0

4.IIC总线的传输步骤

(1)主设备发送起始信号

(2)主设备发送从设备地址(7位)+读写信号(1表示读,0表示写)

如果从设备在位(地址匹配),向主设备发送ACK(有效应答)

(3)主设备按照从设备的要求和从设备通信

通过从设备的说明手册

(4)通信完成之后主设备发送停止信号

5.at24c02 ---------- eeprom

at24c02是一款eeprom芯片,eeprom是电擦除的掉电数据不丢失的存储芯片,和外部通过IIC接口进行通信(读/写)。

(1)原理图

0

0

写保护(关闭),A0,A1,A2接地,对应的地址位为0

IIC的SCL和SDA连接到了CPU的PB8 PB9

(2)at24c02的说明手册

从设备地址:

0

读写操作:

0

0

(3)IIC通信的编程实现

1)使用GPIO模拟IIC时序进行传输

2)使用芯片内部的IIC控制器进行传输(如果有的话)

只需要将数据交给IIC控制器(发送),从控制器直接读取数据(接收)

(4)at24c02按页写和连续读

0

0

练习:

添加蓝牙命令,实现at24c02的字节读写

eepromread:0x10:*
eepromwrite:0x10:0x55:*

strtok函数 ------ 分割字符串

char *strtok(char s[],char *delim);
//第一个参数是要分割的字符串,第二个参数是分隔符
//返回第一个子串,自此调用返回下一个子串(此时第一个参数传NULL)
//返回NULL表示子串取完了

作业:

通过蓝牙命令修改时间

发送命令

settime:17:35:50:*
//1.使能PWR时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
//2.使能RTC寄存器的写操作
PWR_BackupAccessCmd(ENABLE);
//5.关闭RTC写保护,等待就绪
RTC_WaitForSynchro();

//设置时间
RTC_SetTime(xxx);