STM32F0 用cubemx生成的SMBus-Alert-mode,cubemx中中断使能开启了,现在问题接收不到数据,初始化中增加了一下代码
__HAL_SMBUS_GET_IT_SOURCE(&hsmbus1,SMBUS_FLAG_RXNE);
__HAL_SMBUS_GET_IT_SOURCE(&hsmbus1,SMBUS_FLAG_ADDR);
__HAL_SMBUS_GET_IT_SOURCE(&hsmbus1,SMBUS_FLAG_STOPF);
__HAL_SMBUS_GET_IT_SOURCE(&hsmbus1,SMBUS_FLAG_TC);
__HAL_SMBUS_ENABLE_IT(&hsmbus1,SMBUS_IT_ERRI);
__HAL_SMBUS_ENABLE_IT(&hsmbus1,SMBUS_IT_TCI);
__HAL_SMBUS_ENABLE_IT(&hsmbus1,SMBUS_IT_STOPI);
__HAL_SMBUS_ENABLE_IT(&hsmbus1,SMBUS_IT_NACKI);
__HAL_SMBUS_ENABLE_IT(&hsmbus1,SMBUS_IT_ADDRI);
__HAL_SMBUS_ENABLE_IT(&hsmbus1,SMBUS_IT_RXI);
|
发生相应事件时应该是可以触发中断并进入中断服务程序的。
当然,当我们基于非阻塞式调用ST 固件库中相应中断型API函数时,API函数里也会针对性使能相关中断请求,比方下面这些:
HAL_SMBUS_Master_Transmit_IT();
HAL_SMBUS_EnableListen_IT();
HAL_SMBUS_Master_Receive_IT();
HAL_SMBUS_Slave_Transmit_IT();
HAL_SMBUS_EnableListen_IT();
。。。。。。这些在库函数都有罗列和介绍。
虽说,你现在选择的SMBUS ALERT模式及接口,基本的还是I2C通信协议。
MBus协议定义了多种命令,用于设备之间的通信。每个设备可以使用下面的任意一种或多种协议进行通信。这些协议包括:
Quick Command
Send Byte
Receive Byte
Write Byte
Write Word
Read Byte
Read Word
Process Call
Block Read
Block Write
Block Write-Block Read Process Call
这些命令在SMBUS的协议里有明确的格式定义与说明,到http://smbus.org就可以下载。
您好, 可以在中断里面获取数据吗?,怎么设置的可以发个范例吗?
肯定可以基于中断方式进行通信,即收发的。先从最基本的读写做起,库里都有中断方式的读写例程。
[md]改2个地址就可以,参考STM32_AN4502_FW_V2.0.3,这份档案,是PMUbs从机
smbus初始化
中断接收