CubeMX I2C 官方中断方式例程
STM32 CubeMXI2C 官方中断方式例程但看不出这I2C中断方式,中断的意义是什么?
do
{
if(HAL_I2C_Master_Transmit_IT(&I2cHandle, (uint16_t)I2C_ADDRESS, (uint8_t*)aTxBuffer, TXBUFFERSIZE)!= HAL_OK)
{//HAL_I2C_Master_Transmit_IT( )这个函数在这里执行完,那应该整个数据包发送就发送完了,这样的话,中断用来干什么?除非它是在这里只是起
//动发送第一个字节的发送和开中断,这样发完第一个字节,产生中断,然后在中断里再发送下一个字节,。。。但在例程和中断处理里,没看到这些呢。我所知在usart 发送的中断方式是这样的。真不知道这跟中断在哪个地方有关联。
Error_Handler();
}
while (HAL_I2C_GetState(&I2cHandle) != HAL_I2C_STATE_READY)//上一句HAL_I2C_Master_Transmit_IT( ),执行完,就意味着数据发送完成了,不用在这里还等数据发送结束吧?
{
}
}
while(HAL_I2C_GetError(&I2cHandle) == HAL_I2C_ERROR_AF);//这句作用是什么?
下面是接收:
do
{
if(HAL_I2C_Master_Receive_IT(&I2cHandle, (uint16_t)I2C_ADDRESS, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
{//HAL_I2C_Master_Receive_IT()这一句只是使能接收中断而已吗?也就是说,这一句执行完,并不是数据包都接收完了,而是在接收中断产生时,去接收一个字节,把它放在aRxBuffer,再退出中断,下次中断产生,再按同样的方式去把接收到的字节放到aRxBuffer?但在这个例程里看不到它在中断时
是怎样运作的。
Error_Handler();
}
}
while(HAL_I2C_GetError(&I2cHandle) == HAL_I2C_ERROR_AF);//这句的作用是什么呢?
例程是有英文注释,但看了还是弄不清楚。
所以在此请教下理解得很透彻的高手。谢谢
HAL_I2C_Master_Transmit_IT()只是启动传输,完成之后会有回调 中断是为了释放CPU资源啊 看这些中断的代码,主要是找回调函数,才能知道中断干什么。 是这样的两个带_IT的作用就是非堵塞的。如果说人话:就是你发送完_IT之后,这段程序只会告诉你你这个发送“指令”又没又真的执行,而发送的过程其实还在进行。希望这样你可以理解。
正如很多朋友说的你如果争取调用IT之后,程序就会执行发送或接收,当发送或接收完成就会给执行你回调函数的程序。 斜阳__ 发表于 2019-1-23 14:51
HAL_I2C_Master_Transmit_IT()只是启动传输,完成之后会有回调
假如是如你所说HAL_I2C_Master_Transmit_IT()只是启动传输,那么真正的传输动作在哪里去做的?完成之后会有回调,你所说的完成,是指传输完一个节还是整个数据包?还有,这回调要去做哪些东西?这回调里面什么都不写行不行呢?
请教下 Kevin201707 发表于 2019-1-24 10:07
中断是为了释放CPU资源啊
在I2C传输过程中,能中断去做其他事吗?特别是在传输一个BIT时,或说传输完一个bYTE,在传输下一个BYTE的间隙,中断去做其他事情倒或有点可能?
也就是说,在传输过程只能专一地把I2C这件事做好,做完了才能释放CPU资源去干别的 watershade 发表于 2019-1-25 10:25
是这样的两个带_IT的作用就是非堵塞的。如果说人话:就是你发送完_IT之后,这段程序只会告诉你你这个发送“ ...
不理解兄弟要表达什么 hqw 发表于 2019-1-26 12:27
假如是如你所说HAL_I2C_Master_Transmit_IT()只是启动传输,那么真正的传输动作在哪里去做的?完成之后 ...
1、先看参考手册,把这块儿看通,
2、然后看HAL 的API手册
启动发送之后,片上外设将数据发送出去,一个byte发送完后触发中断。这个中断由HAL库处理,用于装填新数据。当所有数据发送完成后,HAL库会进行发送完成回调,通知用户程序。
ps:如果想深入理解就好好看看参考手册,先看懂外设是怎么运行的。或者看原子、安富莱等学习板的教程。在学习上你偷懒没有一点好处。如果只是想跑通就跟着示例来。 建议楼主先看一下HAL库的串口中断发送和中断接收的过程,就知道HAL库的中断发送和接收的特点了,感觉你对HAL库的中断实现还没有弄懂,所以,可以先去百度下相关的知识。
页:
[1]
2