1、E3210的外设简介
1、8 x CAN/CANFD;
2、12 x LIN/UART;
3、1 x Gigabit Ethernet TSN2;
4、1 x USB2.0 Host/Device;
5、2 x I2S/TDM;
6、4 x I2C;
7、4 x SPI;
8、2 x ePWM, 8-ch per ePWM;
2、E3210的 I2C 的引脚配置
I2Cx |
SCL |
SDA |
MUXx |
I2C3 |
GPIO_B4 |
GPIO_B5 |
MUX6 |
GPIO_X9 |
GPIO_X10 |
MUX6 | |
I2C4 |
GPIO_Y2 |
GPIO_Y3 |
MUX6 |
I2C5 |
GPIO_Y6 |
GPIO_Y6 |
MUX6 |
I2C6 |
GPIO_Y8 |
GPIO_Y9 |
MUX6 |
引脚初始化配置:
SCL |
SDA |
|
1、pin index = GPIO_Y8, 2、mux = PIN_MUX_ALT6, 3、open drain=PIN_PUSH_PULL, 4、pull_config = PIN_PULL_UP 5、drive_strength = PIN_DS_8MA, 6、slew_rate = PIN_SR_FAST, 7、input_select = PIN_IS_CMOS_SCHMITT, 8、data_direction = PIN_INPUT_DIRECTION, 9、interrupt_config = PIN_INTERRUPT_DISABLED, 10、initial_value = PIN_LEVEL_LOW, 11、force_input = PIN_FORCE_INPUT_ENABLE, 12、mode_select = PIN_MODE_DIGITAL, |
1、pin_index = GPIO_Y9, 2、mux = PIN_MUX_ALT6, 3、open_drain = PIN_PUSH_PULL, 4、pull_config = PIN_PULL_UP, 5、drive_strength = PIN_DS_8MA, 6、slew_rate = PIN_SR_FAST, 7、input_select = PIN_IS_CMOS_SCHMITT, 8、data_direction = PIN_OUTPUT_DIRECTION, 9、interrupt_config = PIN_INTERRUPT_DISABLED, 10、initial_value = PIN_LEVEL_LOW, 11、force_input = PIN_FORCE_INPUT_ENABLE, 12、mode_select = PIN_MODE_DIGITAL, |
1、引脚对应的引脚位数 2、当前引脚的功能选择 3、推挽输出 4、上拉 5、驱动 Max = 8mA 6、引脚快速翻转 7、引脚输入选择 cmos Schmitt 8、引脚配置为输出 9、禁止中断 10、引脚初始输出为低电平 11、配置引脚上下拉 12、配置引脚模式选择 |
3、OLED的初始化
初始化流程:
发送一个字节,向 SSD1306 写入一个字节,SSD1306 是一款单片 CMOS OLED/PLED 驱动器,具有有机/聚合物发光控制器二极管点阵图形显示系统。它由 128 个段和 64 个公共部分组成。这个 IC 是为普通阴极型 OLED 面板设计。SSD1306 内置对比度控制、显示 RAM 和振荡器,减少了外部组件和功耗。它有 256 级亮度控制。数据/命令是从通用单片机通过硬件可选的 6800/8000 系列兼容并行接口发送,I2C 接口或串行外围接口。它适用于许多紧凑型便携式应用程序,例如手机副显示屏、MP3 播放器、计算器等。
mode:数据/命令标志 0,表示命令; 1,表示数据。
void OLED_WR_Byte(uint8_t dat,uint8_t mode);
void OLED_Init(void)
{
0xae - 关闭 oled 面板
0x00 - 设置低位地址
0x10 - 设置高位地址
0x40 - 设置起始行地址
0x81 - 设置对比度控制寄存器
0xcf
0xa1 - 设置段重映射95 为 0
0xa6 - 设置正常显示
0xa8 - 设置复用比(1 to 64)
0x3f - 1/64
0xd3 - 设置显示偏移量
0x00 -不补偿
0xd5 - 设置显示时钟分割比/振荡器频率
0x80 - 设定分割比例
0xd9 - 设置电源预值
0xf1
0xda - 设置引脚硬件配置
0x12
0xdb - 设置 vcomh
0x40
0x8d - 设置电源启动/禁用
0x14 - 设置 0x10 禁用
0xaf - 开启 oled 屏幕
}
4、sdrv_i2c 中的函数介绍
总共有 10 个 函数,分别是:
1、int sdrv_i2c_set_transmode(sdrv_i2c_t *ctrl,sdrv_i2cdrv_tsmode_t tsmode);
功能:设置i2c控制器传输模式(仅适用于主设备)。
2、 int sdrv_i2c_set_speedmode(sdrv_i2c_t *ctrl, sdrv_i2cdrv_speed_t speed);
功能:设置i2c控制器调速模式(仅适用于主设备)。
3、 int sdrv_i2c_init_ctrl(sdrv_i2c_t *ctrl);
功能:初始化i2c控制器。
4、sdrv_i2cdrv_trans_stat_t sdrv_i2c_write(sdrv_i2c_t *ctrl, uint16_t addr, uint8_t *wbuf, uint16_t wlen, uint32_t timeout, bool need_stop);
功能:写数据到从设备(仅适用于主设备)。
5、sdrv_i2cdrv_trans_stat_t sdrv_i2c_read(sdrv_i2c_t *ctrl, uint16_t addr,uint8_t *rbuf, uint16_t rlen, uint32_ttimeout, bool need_stop);
功能:从从设备读取数据(仅适用于主设备)。
6、sdrv_i2cdrv_bus_stat_t sdrv_i2c_get_bus_stat(sdrv_i2c_t *ctrl);
功能:获得总线属性(只适用于主设备)。
7、int sdrv_i2c_set_bus_stat(sdrv_i2c_t *ctrl,sdrv_i2cdrv_bus_stat_t bus_stat);
功能:设置总线属性(仅适用于主设备)。
8、int sdrv_i2c_slv_set_buf(sdrv_i2c_t *ctrl, uint8_t *tbuf, uint8_t *rbuf);
功能:客户分配 buf 给 i2c 驱动框架(只适用于从设备)。
9、int sdrv_i2c_slv_set_done(sdrv_i2c_t *ctrl);
功能:设置接收数据已处理或发送数据已准备好(只适用于从设备)。
10、sdrv_i2cdrv_slv_event_t sdrv_i2c_slv_get_event(sdrv_i2c_t *ctrl);
功能:获取当前事件类型(仅适用于从设备)。
本次驱动 OLED 屏幕用到了 I2C 初始化函数和 I2C 写函数。 这两个函数的基本描述为:
1、int sdrv_i2c_init_ctrl(sdrv_i2c_t *ctrl);
该函数有 1 个参数为 I2C 的实例结构体,包括(clk、base、irq、id、 inited、opmode、tsmode、speed、bus_stat)。
clk = 0, base = APB_I2C4_BASE, irq = I2C4_INTR_NUM, id = 4, inited = 0, opmode = SDRV_I2CDRV_MASTER, tsmode = SDRV_I2CDRV_POLL, speed = SDRV_I2CDRV_FSPEED, bus_stat = SDRV_I2CDRV_BUS_IDLE, |
配置时钟, 配置 I2C 基地址, 配置 I2C 中断, 配置 ID, 是否已初始化 配置主从模式, 配置轮询或中断模式, 配置波特率, 总线状态获取, |
2、sdrv_i2cdrv_trans_stat_t sdrv_i2c_write(sdrv_i2c_t *ctrl, uint16_t addr, uint8_t *wbuf, uint16_t wlen, uint32_t timeout, bool need_stop);
该函数有 6 个参数分别为(i2c 控制器实例指针、addr 从设备7位地址不包含 LSB 读写位、Wbuf 指向用于发送的数据 buf、数据 buf 的长度、以毫秒为单位的最大等待时间,只适用于 INTP 模式,POLL 模式省略、是否发送停止信号)。
5、OLED 原理图
评论