完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
没接触过MCU,为了解码器制作苦学了几天STM8单片机I2C,网上查了很多资料,现在通过硬件I2C可以读写从机了,
写可以写很多寄存器,但是读只能读一个寄存器,连续读多个寄存器会卡死在读取函数第1步,这个倒不是关键, 关键问题是:我想一直重复读取音频解码芯片的SPDIF状态寄存器,根据状态控制亮灯灭灯,启动时可以正确点亮,debug时程序可以一直循环不报错,但是从机寄存器状态变了,灯不灭! 请大师帮我看看程序怎么改~~ void I2C_Read(uint8_t address) { while(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY)); I2C_GenerateSTART(ENABLE); while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT)); I2C_Send7bitAddress(DAC_ADDRESS, I2C_DIRECtiON_TX); while(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); I2C_SendData(address); while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED)); I2C_GenerateSTART(ENABLE); while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT)); I2C_Send7bitAddress(DAC_ADDRESS, I2C_DIRECTION_RX); while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED)); SPDIF_STATUS = I2C_ReceiveData(); I2C_AcknowledgeConfig(I2C_ACK_CURR); I2C_GenerateSTOP(ENABLE); } void main(void) { MCU_Init(); DAC_Init(); I2C_Write(0x00,0x04); I2C_Write(0x0E,0x4C); I2C_Write(0x0F,0x00); I2C_Write(0x10,0x00); while (1) { I2C_Read(0x60); if(SPDIF_STATUS==0x34) GPIO_WriteLow(GPIOD, (GPIO_Pin_TypeDef)GPIO_PIN_3); else GPIO_WriteHigh(GPIOD, (GPIO_Pin_TypeDef)GPIO_PIN_3); Delay(0xFFFF); } } |
|
相关推荐
1个回答
|
|
看一下波形,注意I2C读取的时候,如果是只读一个,就不要回复ACK。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2093 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1931 浏览 3 评论
4526 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2076 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2587 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 13:07 , Processed in 0.621545 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号