2025/12/29 19:42:18
网站建设
项目流程
c 做网站开发,网站开发 策划书,怎么在百度搜索到我的网站,中国工信部官网查询网站备案传输时序#xff1a;1.器件地址通过AT24C02上的A0、A1、A2三个地址位引脚提前设定#xff1b;2.地址指的是挂载在总线上的存储的器件的地址#xff1b;3.器件内部的存储地址是第一个要发送的数据#xff08;Data1#xff09;#xff1b;SCB寄存器:位于内核中#xff1b;…传输时序1.器件地址通过AT24C02上的A0、A1、A2三个地址位引脚提前设定2.地址指的是挂载在总线上的存储的器件的地址3.器件内部的存储地址是第一个要发送的数据Data1SCB寄存器:位于内核中为什么要使用中断硬件按SCL时序完成数据收发和ACK检测后触发中断中断服务函数读取硬件的状态标志确认操作是否成功再指挥硬件执行后续的数据发送/接收动作若在轮询模式下使用while循环CPU会死等应答信号造成CPU资源浪费ACK 检测是硬件的活CPU 不参与、不等待全程可以处理其他任务仅当硬件检测到ACK结果成功/失败然后触发中断触发时CPU才花极短时间处理结果这正是中断模式效率高的核心原因多地址模式中的第二地址为挂载更多的设备在总线上Debug时遇到的问题1.在循环处打断点设置循环次数出现debug不停的现象可以选择程序中的行号打断点也可以选择汇编指令中的地址号打断点ctrlb调出菜单define断点位置和循环次数2.设置条件断点 define a 103.在读写内存的时候设置断点通过选择菜单中的read或write并写入要监测的变量I2C的数据传输采用半双工的传输方式主从设备通过地址帧握手实现数据传输I2C的数据寄存器同SPI一样I2C外设中的数据寄存器也是数据收发的窗口不是正真的buffer寄存器Systick:是CM4的内核外设其中重装载寄存器的值递减到0触发一次中断VAL保存的是当前倒计数的值若需记录触发中断的次数需要软件记录数据传输时的状态读取由软件记录Systick的中断次数为等待状态设定等待时间上限防止死等数据流向由stm32向eeprom写32的内存pBuffPtr指针指向的时32内存中的一块区域里面保存有要写入的内容 - i2c外设数据寄存器 — 通过i2c总线到eeprom由stm32从eeprom读eeprom通过i2c总线 - i2c外设的数据寄存器 - 32内存为什么在向寄存器写入后又读一遍SET_BIT(RCC-APB1ENR, RCC_APB1ENR_I2C1EN);\/* Delay after an RCC peripheral clock enabling */ \tmpreg READ_BIT(RCC-APB1ENR, RCC_APB1ENR_I2C1EN);\UNUSED(tmpreg); \为了实现硬件同步在软件写入之后寄存器会更新内容在读的过程中会检查寄存器中的数据是否稳定从而实现硬件同步的目的遇到了一次Debug显示的Pin值与程序中选择的Pin不一致重新编译了一次再次Debug又一致了可能时编译器缓存或硬件调试器缓存的问题为什么在 HAL_I2C_MspInit 函数里先强制复位I2C再释放复位1.清理 “烂摊子”保证 I2C 从一个干净、已知的状态开始初始化清除之前可能残留的错误或异常设置。2.配合硬件启动硬件要求这样做能让 I2C 与其他部分在启动时同步还能等时钟和电源稳定后再正常工作。3.规范与通用遵循 HAL 库设计规范形成标准流程方便维护和移植也为错误恢复提供基础。该函数会在HAL_I2C_Init中调用