我在Nucleo144板上使用STM32F767ZI单片机,C++作为编程语言,IAR嵌入式工作台集成开发环境。TXIS位标志状态永远不会被设置(1),即使I2C已启用且TXDR寄存器中没有数据。
我还注意到,尽管主机和从机在相关寄存器中具有相同的从机地址,但没有发生ADDCODE。尽管从代码中可以明显看出,我使用的是轮询方法。ADDCODE寄存器应具有与从机地址相同的地址,这也不会发生。
已验证硬件设置是否正确。
尝试使用I2C1作为主发送器,I2C2作为从接收器,在同一个单片机上进行环回测试。代码部分被卡住,如下所示:
while(!(IsTXISset())) // Code is ge
我想做一个预处理宏,它将表示地址的整数转换为指针。这是给单片机开发的。
例如,寄存器定义如下
#define SOME_REGISTER 0x05 // This the the address of SOME_REGISTER
因此,我定义了以下宏:
#define REG_ADDR(reg) (*((volatile uint8_t*) reg))
当我不想用它的时候
volatile uint8_t * reg_ptr = REG_ADDR(SOME_REGISTER)
但当然,我收到了makes pointer from integer without a cast [-Wint-co
目前,我刚刚开始开发ARM Cortex-M4单片机,我在初始化I/O端口时遇到了这个代码。
SYSCTL_RCGC2_R |= 0x00000020; // 1) activate clock for Port F
delay = SYSCTL_RCGC2_R; // allow time for clock to start
GPIO_PORTF_LOCK_R = 0x4C4F434B; // 2) unlock GPIO Port F
GPIO_PORTF_CR_R = 0x1F; // allow changes to PF4-0
.