STM32 CubeMX I2C 官方中断方式例程 但看不出这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);//这句的作用是什么呢? 例程是有英文注释,但看了还是弄不清楚。 所以在此请教下理解得很透彻的高手。谢谢 |
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
正如很多朋友说的你如果争取调用IT之后,程序就会执行发送或接收,当发送或接收完成就会给执行你回调函数的程序。
评分
查看全部评分
假如是如你所说HAL_I2C_Master_Transmit_IT()只是启动传输,那么真正的传输动作在哪里去做的?完成之后会有回调,你所说的完成,是指传输完一个节还是整个数据包?还有,这回调要去做哪些东西?这回调里面什么都不写行不行呢?
请教下
在I2C传输过程中,能中断去做其他事吗?特别是在传输一个BIT时,或说传输完一个bYTE,在传输下一个BYTE的间隙,中断去做其他事情倒或有点可能?
也就是说,在传输过程只能专一地把I2C这件事做好,做完了才能释放CPU资源去干别的
不理解兄弟要表达什么
1、先看参考手册,把这块儿看通,
2、然后看HAL 的API手册
启动发送之后,片上外设将数据发送出去,一个byte发送完后触发中断。这个中断由HAL库处理,用于装填新数据。当所有数据发送完成后,HAL库会进行发送完成回调,通知用户程序。
ps:如果想深入理解就好好看看参考手册,先看懂外设是怎么运行的。或者看原子、安富莱等学习板的教程。在学习上你偷懒没有一点好处。如果只是想跑通就跟着示例来。
评分
查看全部评分
“在传输过程只能专一地把I2C这件事做好,做完了才能释放CPU资源去干别的”
I2C是CPU的外设,而且是硬件I2C,CPU装填完了数据(一个字节,或更多)就不用管了,可以干别的去。
硬件I2C的好处就在这里。
坊间有一个不正确的观念,就是硬件I2C不好用,喜欢自己能“完全控制”的软件I2C。软件I2C使用更多的CPU资源。
应该是把硬件I2C研究透彻。
同问!~~
stm32cube_fw_f1_v180.zip
对应的DEMO板example例程中
stm32cube_fw_f1_v180.zip
对应的DEMO板example例程中