完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
HAL库I2C一次只能写入16个字节,求助!!!读出的数据是正确的。
#define ADDR_24LCxx_Write 0xA0 #define ADDR_24LCxx_Read 0xA1 #define BufferSize 250 uint8_t WriteBuffer[BufferSize],ReadBuffer[BufferSize]; uint16_t i; int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); MX_USART2_UART_Init(); MX_USART3_UART_Init(); MX_tiM2_Init(); MX_I2C1_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim2); for(i=0; i if(HAL_I2C_Mem_Write(&hi2c1, ADDR_24LCxx_Write, 0, I2C_MEMADD_SIZE_8BIT,WriteBuffer,BufferSize, 0x10) == HAL_OK) HAL_Delay(1000); else HAL_Delay(2000); //写EEPROM时出错,只能执行到此条。 /* read date from EEPROM */ //读正常 HAL_I2C_Mem_Read(&hi2c1, ADDR_24LCxx_Read, 0, I2C_MEMADD_SIZE_8BIT,ReadBuffer,BufferSize, 0x10); HAL_Delay(1000); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } |
|
相关推荐
8个回答
|
|
楼主要看你用的是什么芯片了,有的芯片页容量是不一样的。涉及到跨页的时候,需要写页地址的。
|
|
|
|
用的24C16 ,难道这函数不能自动跨页写的吗?
|
|
|
|
本帖最后由 toofree 于 2018-7-19 09:56 编辑
程序得自己写吧。 要跨页,首先你得有页大小定义吧,#define PageSize 16 然后在程序中判断,是否跨页,如果跨页,必须发送停止位,延时5ms;然后再次指定新的写入地址,然再次写入数据。每次跨页或最后写入结束,必须加5ms的延时,这个延时手册中是Twc。 |
|
|
|
谢谢各位,我以为HAL库函数可以自动跨页写的,现在明白了,跨页得自己写
|
|
|
|
高层的接口函数 根据不同的芯片要做修改的,得看芯片资料
|
|
|
|
|
|
|
|
可以设置的哦
|
|
|
|
half Word均可
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 18:18 , Processed in 0.961742 second(s), Total 86, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号