1#ifndef __SOFTI2C_H_2#define__SOFTI2C_H_34#include"main.h"5//使用IICX PD6,PC167#defineSDA_IN() {GPIOC->MODER &= ~(3 << 1 * 2);GPIOC->MODER = (0 << 1 * 2);}8#defineSDA_OUT() {GPIOC->MODER &= ~(3 << 1 * 2);GPIOC->MODER = (1 << 1 * 2);}910//IO...
/** * 函数功能: 重定向c库函数printf到DEBUG_USARTx * 输入参数: 无 * 返回值: 无 * 说明:无 */intfputc(int ch,FILE*f){HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xffff);returnch;}/** * 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx * 输入参数: 无 * 返回值: 无 * 说明...
/// 设置IIC的SDA引脚为输入 void SDA_SET_IN(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = IIC_SDA_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } void IIC_Start(void) { SD...
void (*IIC_Ack)(const struct IIC_Type*); //IIC_Ack,IIC发送ACK信号void (*IIC_NAck)(const struct IIC_Type*); //IIC_NAck,IIC发送NACK信号 void (*IIC_Send_Byte)(const struct IIC_Type*,uint8_t); //IIC_Send_Byte,入口参数为要发送的字节 uint8_t (*IIC_Read_Byte)(const struct IIC_T...
目前IICOLED屏幕是初学者常用的外设,本文将介绍STM32F407(所有STM32都大同小异)方面的oled驱动,下一篇文章将会介绍linux的IIC驱动。 OLED启动主要分为以下几步: ①屏幕初始化 ②开启屏幕显示 ③清屏(不清屏的话屏幕将会出现一片雪花) ④发送要显示的字符串、数字、汉字等 ...
代码片4 从机监听入口函数,在主函数或初始化时调用即可。 参考资料 总结一下首次使用HAL库STM32f030硬件IIC从机中断收发 STM32 HAL I2C(IIC)通信的序列传输(restart condition) STM32F407硬件I2C Slave 简书也太难用了
IIC是多主、多从、单工IIC的串行总线,传输仅需两根线,SDA(数据线)、SCL(时钟线) IIC空闲时SDA和SCL都处于高电平状态(两根线一般情况均接上拉电阻) IIC传输数据的模式为每传输8位后,要通过一个ACK位进行相互确认。 个人认为SCL产生上升沿后,设备开始检测SDA的电平,当SDA下降,SCL为高,表示开始工作,以此作为当前...
基于stm32f1 hal库,软件iic的方式,+dmp读取mpu6050数据, 视频播放量 159、弹幕量 0、点赞数 1、投硬币枚数 2、收藏人数 1、转发人数 0, 视频作者 玉京星阙杳然迹destiny, 作者简介 全栈工程师,大厂多年,相关视频:基于stm32单片机的呼叫系统,【Ai教程】别再到处找了!
打印的结果: 这里需要注意下: ST的HAL库,I2C读函数 HAL_I2C_Master_Receive 仅做读那一部分操作,按照I2C协议,要完成从机的数据读取,需要先寻址发送寄存器地址,然后再读,所以这里需要使用I2C写函数HAL_I2C_Master_Transmit来配合。
关于这份代码起因是用HAL库的IIC代码可能是由于我自己的能力不够,始终没有办法驱动我手上的一块OLED屏幕,于是我就利用HAL库写了一份代码,可以很好的驱动起来;后来我的手上又有了一块MPU6050,同样也是使用IIC通信的,这时我想到把两者同时利用起来,但是由于我写的烂代码的很难同时驱动两个,于是就有了下面这些具有一...