你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32C0评测】3、I2C使用

[复制链接]
网络孤客 发布时间:2024-3-11 17:06

【STM32C0评测】3、I2C使用

一、STM32C0的I2C接口介绍

STM32C0、STM32G0、STM32L0等ARM^®^ Cortex^®^ -M0+内核MPU带的I2C接口都支持超快速模式(高达 1 MHz)

其中STM32C031C6有1个I2C接口

1I2C.jpg

STM32F1系列I2C设置

F1I2C.jpg

STM32C0系列I2C设置,可见比以前的设置多了不少。

C0I2C.jpg

Custom Timing设置为Enabled,直接可以编辑上图灰色选项——Timing,对应的是配置代码中红线部分。这个寄存器值已经包含I2C速度、上升和下降时间、数字滤波等值。

I2C配置.jpg

具体设置请参考RM0490 STM32C 0x1参考手册

上升下降时间.jpg

2、硬件连接

I2C的SDA/SCL分别默认对应的是PB9/PB8,如GPIO被其他功能占用

I2C_SDA还可以设置在PA10、PB7、PC14

I2C_SCL还可以设置在PA9、PB6、PB7

pin.jpg

I2C接口的OLED屏只需4根线,接线方式看下图

电路图.jpg

接线.jpg

三、程序

为了方便我定义了接口程序

void I2C_Master_Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size)

{

while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY) { }

while (HAL_I2C_Master_Transmit(&hi2c1,DevAddress,pData,Size,100)!= HAL_OK)

{

if (HAL_I2C_GetError(&hi2c1)!= HAL_I2C_ERROR_AF)

{

Error_Handler();

} }

}

OLED侧接口代码

void OLED_WR_Byte(uint8_t Byte,uint8_t DC)

{

uint8_t SendBuff[2];

SendBuff[0] = DC;

SendBuff[1] = Byte;

I2C_Master_Transmit(OLED_ADDRESS,SendBuff,2);

}

四、效果

我不确定OLED屏是否能用在超快速模式,先以400K速度驱动

效果1.jpg

后续改为超快速模式测试,成功了!

效果2.jpg

测试频率为800KHz,没进一步深究问题在哪,但已经比400KHz快一倍

测试频率.jpg

收藏 评论0 发布时间:2024-3-11 17:06

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版