/**
******************************************************************************
* @file stm32f4xx_hal_i2c.c
* @author MCD Application Team
* @brief I2C HAL module driver.
* This file provides firmware functions to manage the following
* functionalities of the Inter Integrated Circuit (I2C) peripheral:
* + Initialization and de-initialization functions
* + IO operation functions
* + Peripheral State, Mode and Error functions
*
@verbatim
==============================================================================
##### How to use this driver #####
==============================================================================
[..]
The I2C HAL driver can be used as follows:
(#) Declare a I2C_HandleTypeDef handle structure, for example:
I2C_HandleTypeDef hi2c;
(#)Initialize the I2C low level resources by implementing the @ref HAL_I2C_MspInit() API:
(##) Enable the I2Cx interface clock
(##) I2C pins configuration
(+++) Enable the clock for the I2C GPIOs
(+++) Configure I2C pins as alternate function open-drain
(##) NVIC configuration if you need to use interrupt process
(+++) Configure the I2Cx interrupt priority
(+++) Enable the NVIC I2C IRQ Channel
(##) DMA Configuration if you need to use DMA process
(+++) Declare a DMA_HandleTypeDef handle structure for the transmit or receive stream
(+++) Enable the DMAx interface clock using
(+++) Configure the DMA handle parameters
(+++) Configure the DMA Tx or Rx stream
(+++) Associate the initialized DMA handle to the hi2c DMA Tx or Rx handle
(+++) Configure the priority and enable the NVIC for the transfer complete interrupt on
the DMA Tx or Rx stream
(#) Configure the Communication Speed, Duty cycle, Addressing mode, Own Address1,
Dual Addressing mode, Own Address2, General call and Nostretch mode in the hi2c Init structure.
(#) Initialize the I2C registers by calling the @ref HAL_I2C_Init(), configures also the low level Hardware
(GPIO, CLOCK, NVIC...etc) by calling the customized @ref HAL_I2C_MspInit() API.
(#) To check if target device is ready for communication, use the function @ref HAL_I2C_IsDeviceReady()
(#) For I2C IO and IO MEM operations, three operation modes are available within this driver :
*** Polling mode IO operation ***
=================================
[..]
(+) Transmit in master mode an amount of data in blocking mode using @ref HAL_I2C_Master_Transmit()
(+) Receive in master mode an amount of data in blocking mode using @ref HAL_I2C_Master_Receive()
(+) Transmit in slave mode an amount of data in blocking mode using @ref HAL_I2C_Slave_Transmit()
(+) Receive in slave mode an amount of data in blocking mode using @ref HAL_I2C_Slave_Receive()
*** Polling mode IO MEM operation ***
=====================================
[..]
(+) Write an amount of data in blocking mode to a specific memory address using @ref HAL_I2C_Mem_Write()
(+) Read an amount of data in blocking mode from a specific memory address using @ref HAL_I2C_Mem_Read()
*** Interrupt mode IO operation ***
===================================
[..]
(+) Transmit in master mode an amount of data in non-blocking mode using @ref HAL_I2C_Master_Transmit_IT()
(+) At transmission end of transfer, @ref HAL_I2C_MasterTxCpltCallback() is executed and user can
add his own code by customization of function pointer @ref HAL_I2C_MasterTxCpltCallback()
(+) Receive in master mode an amount of data in non-blocking mode using @ref HAL_I2C_Master_Receive_IT()
(+) At reception end of transfer, @ref HAL_I2C_MasterRxCpltCallback() is executed and user can
add his own code by customization of function pointer @ref HAL_I2C_MasterRxCpltCallback()
(+) Transmit in slave mode an amount of data in non-blocking mode using @ref HAL_I2C_Slave_Transmit_IT()
(+) At transmission end of transfer, @ref HAL_I2C_SlaveTxCpltCallback() is executed and user can
add his own code by customization of function pointer @ref HAL_I2C_SlaveTxCpltCallback()
(+) Receive in slave mode an amount of data in non-blocking mode using @ref HAL_I2C_Slave_Receive_IT()
(+) At reception end of transfer, @ref HAL_I2C_SlaveRxCpltCallback() is executed and user can
add his own code by customization of function pointer @ref HAL_I2C_SlaveRxCpltCallback()
(+) In case of transfer Error, @ref HAL_I2C_ErrorCallback() function is executed and user can
add his own code by customization of function pointer @ref HAL_I2C_ErrorCallback()
(+) Abort a master I2C process communication with Interrupt using @ref HAL_I2C_Master_Abort_IT()
(+) End of abort process, @ref HAL_I2C_AbortCpltCallback() is executed and user can
add his own code by customization of function pointer @ref HAL_I2C_AbortCpltCallback()
*** Interrupt mode or DMA mode IO sequential operation ***
==========================================================
[..]
(@) These interfaces allow to manage a sequential transfer with a repeated start condition
when a direction change during transfer
[..]
(+) A specific option field manage the different steps of a sequential transfer
(+) Option field values are defined through @ref I2C_XferOptions_definition and are listed below:
(++) I2C_FIRST_AND_LAST_FRAME: No sequential usage, functionnal is same as associated interfaces in no sequential mode
(++) I2C_FIRST_FRAME: Sequential usage, this option allow to manage a sequence with start condition, address
and data to transfer without a final stop condition
(++) I2C_FIRST_AND_NEXT_FRAME: Sequential usage (Master only), this option allow to manage a sequence with start condition, address
and data to transfer without a final stop condition, an then permit a call the same master sequential interface
several times (like @ref HAL_I2C_Master_Seq_Transmit_IT() then @ref HAL_I2C_Master_Seq_Transmit_IT()
or @ref HAL_I2C_Master_Seq_Transmit_DMA() then @ref HAL_I2C_Master_Seq_Transmit_DMA())
(++) I2C_NEXT_FRAME: Sequential usage, this option allow to manage a sequence with a restart condition, address
and with new data to transfer if the direction change or manage only the new data to transfer
if no direction change and without a final stop condition in both cases
(++) I2C_LAST_FRAME: Sequential usage, this option allow to manage a sequance with a restart condition, address
and with new data to transfer if the direction change or manage only the new data to transfer
if no direction change and with a final stop condition in both cases
(++) I2C_LAST_FRAME_NO_STOP: Sequential usage (Master only), this option allow to manage a restart condition after several call of the same master sequential
interface several times (link with option I2C_FIRST_AND_NEXT_FRAME).
Usage can, transfer several bytes one by one using HAL_I2C_Master_Seq_Transmit_IT(option I2C_FIRST_AND_NEXT_FRAME then I2C_NEXT_FRAME)
or HAL_I2C_Master_Seq_Receive_IT(option I2C_FIRST_AND_NEXT_FRAME then I2C_NEXT_FRAME)
or HAL_I2C_Master_Seq_Transmit_DMA(option I2C_FIRST_AND_NEXT_FRAME then I2C_NEXT_FRAME)
or HAL_I2C_Master_Seq_Receive_DMA(option I2C_FIRST_AND_NEXT_FRAME then I2C_NEXT_FRAME).
Then usage of this option I
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
嵌入式优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人单片机开发经验充足,深耕嵌入式领域,有任何使用问题欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明,项目具体内容可查看下方的资源详情。 【附带帮助】: 若还需要嵌入式物联网单片机相关领域开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步。 【本人专注嵌入式领域】: 有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为你提供帮助,CSDN博客端可私信,为你解惑,欢迎交流。 【建议小白】: 在所有嵌入式开发中硬件部分若不会画PCB/电路,可选择根据引脚定义将其代替为面包板+杜邦线+外设模块的方式,只需轻松简单连线,下载源码烧录进去便可轻松复刻出一样的项目 【适合场景】: 相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多功能
资源推荐
资源详情
资源评论
收起资源包目录
基于stm32设计的智能小车(毕设/课设/竞赛/实训/项目开发) (616个子文件)
carPrj.axf 1.25MB
carPrj.carPrj.cspy.bat 2KB
kill.bat 617B
carPrj.pbd.browse 2.74MB
stm32f4xx_hal_i2c.c 226KB
stm32f4xx_hal_tim.c 207KB
tasks.c 166KB
stm32f4xx_hal_rcc_ex.c 150KB
stm32f4xx_hal_uart.c 108KB
queue.c 91KB
stm32f4xx_hal_tim_ex.c 64KB
stm32f4xx_hal_flash_ex.c 49KB
cmsis_os2.c 43KB
stream_buffer.c 41KB
stm32f4xx_hal_rcc.c 41KB
stm32f4xx_hal_dma.c 39KB
timers.c 39KB
shell.c 33KB
port.c 27KB
event_groups.c 25KB
system_stm32f4xx.c 25KB
stm32f4xx_hal_flash.c 24KB
stm32f4xx_hal_pwr_ex.c 22KB
stm32f4xx_hal_pwr.c 19KB
stm32f4xx_hal.c 19KB
stm32f4xx_hal_gpio.c 19KB
stm32f4xx_hal_cortex.c 18KB
stm32f4xx_hal_exti.c 15KB
heap_4.c 14KB
croutine.c 13KB
tim.c 12KB
usart.c 11KB
stm32f4xx_hal_dma_ex.c 10KB
stm32f4xx_it.c 9KB
list.c 8KB
freertos.c 7KB
shell_ext.c 6KB
main.c 6KB
stm32f4xx_hal_flash_ramfunc.c 6KB
stm32f4xx_hal_i2c_ex.c 5KB
revDataInfo.c 4KB
stm32f4xx_hal_timebase_tim.c 4KB
i2c.c 4KB
gpio.c 3KB
dma.c 3KB
pidCtl.c 3KB
LED.c 2KB
stm32f4xx_hal_msp.c 2KB
motor.c 2KB
Encode.c 2KB
pid.c 2KB
shellUsart.c 681B
esp12s.c 527B
userMain.c 489B
duration.cpp 2KB
time.cpp 2KB
rosMain.cpp 932B
carPrj.crun 371B
carPrj.dbgdt 62KB
carPrj.dnx 4KB
carPrj.ewd 30KB
carPrj.ewp 42KB
Project.eww 143B
stm32f407xx.h 1.27MB
stm32f4xx_hal_rcc_ex.h 425KB
stm32_hal_legacy.h 204KB
core_cm33.h 169KB
core_armv8mml.h 162KB
core_cm7.h 142KB
core_cm4.h 119KB
stm32f4xx_hal_tim.h 111KB
core_cm3.h 107KB
core_sc300.h 106KB
core_cm23.h 100KB
task.h 97KB
core_armv8mbl.h 94KB
stm32f4xx_hal_gpio_ex.h 79KB
stm32f4xx_hal_rcc.h 72KB
stm32f4xx_hal_flash_ex.h 63KB
cmsis_gcc.h 59KB
queue.h 59KB
timers.h 58KB
cmsis_armclang.h 53KB
core_cm0plus.h 48KB
semphr.h 46KB
core_sc000.h 45KB
core_cm1.h 41KB
stm32f4xx_hal_uart.h 41KB
FreeRTOS.h 41KB
core_cm0.h 40KB
stm32f4xx_hal_dma.h 37KB
stream_buffer.h 37KB
message_buffer.h 36KB
cmsis_os.h 35KB
cmsis_os2.h 34KB
stm32f4xx_hal_i2c.h 34KB
event_groups.h 29KB
cmsis_iccarm.h 27KB
cmsis_armcc.h 27KB
croutine.h 25KB
共 616 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
阿齐Archie
- 粉丝: 1w+
- 资源: 2303
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功