在之前的标准库中,STM32的硬件IIC非常复杂,更重要的是它并不稳定,所以都不推荐使用。但是在我们的HAL库中,对硬件IIC做了全新的优化,使得之前软件IIC几百行代码,在HAL库中,只需要寥寥几行就可以完成 那么这篇文章将带你去感受下它的优异之处。本文将详细地讲解I2C协议,并基于I2C
来读写EEPROM模块以达到练习的目的通过本篇博客您将学到:I2C的基本原理STM32CubeM
转载
2024-07-01 16:36:09
185阅读
这次教的是使用STM32CubeMX使用FreeRTOS来进行任务的创建与任务的删除(其实还有FreeRTOS还有一些需要注意的地方,但是任务的创建与删除就是最重要的了,其他的会在后面讲到)首先说说对FreeRTOS的看法吧,这是公认的大面积使用的嵌入式操作系统,我之前使用的是ucos,FreeRTOS以前接触的不多,拿他来比较的话,FreeRTOS最大的又是就在于完全免费,所以向我以后会更新的E
转载
2024-05-14 13:46:37
87阅读
目的通过HAL库实现STM32F103C8T6两块板之间的IIC主从相互通信,串口打印接收数据。环境搭建/**I2C1 GPIO Configuration
PB6 ------> I2C1_SCL
PB7 ------> I2C1_SDA
注意通信线记得接上拉电阻4.7k。CubeMx配置配置sys 串行调试 配置外部高速时钟 配置串口,默认值 配置IIC,
转载
2024-04-15 13:26:09
609阅读
1、开发环境安装包获取小熊派开源社区已为大家整理了常用开发工具的下载地址,包括嵌入式硬件开发、嵌入式软件开发、应用软件开发等工具,可在公众号的对话框中获取下载地址。2、STM32CubeMX介绍STM32CubeMX是配置和初始化C代码生成的图形化工具(STM32 configurationand initialization C code generation),如下图所示。3、安装Java环境
文章目录前言I2C控制器设计思路源码分析main.ci2c.ceeprom.c运行结果源码 前言使用硬件I2C是,不用编写协议时序细节,通过寄存器配置好MCU的I²C控制器,I²C控制器便可控制引脚自动输出I²C时序。这里还是基于STM32F103_MIN开发板,以读写EEPROM(ATC2402)为例,进行回顾和分析。I2C控制器STM32F103系列的I2C控制器,可作为通信主机或从机,因此
cubemx快速使用串口前言一、使用cubemx进行串口基本配置二、说明三、实验内容1.串口打印2.串口中断实现回显3.串口接收选择回显内容 前言助力于快速使用串口功能,如果想了解串口协议等知识点等请自行搜索,
这里注明串口下功能实现常用的fputc、字符串发送函数、fgetc函数等函数写法。
实验了三个例子来展示printf函数、串口中断使用、串口基本使用。一、使用cubemx进行串口基本配置
转载
2024-03-31 23:10:24
84阅读
文章目录一、Java环境准备(1)下载JDK(2)安装JDK环境二、安装STM32CubeMX(1)STM32CubeMX的下载(2)STM32CubeMX的安装三、使用STM32CubeMX生成代码(1)工程创建(2)配置外设(3)配置时钟(4)配置GPIO(5)工程设置四、使用Keil5编译(1)修改函数(2)编译五、运行效果六、Keil5仿真观察管脚时序波形(1)调整配置(2)调试并观测波
一直对stm32的硬件iic敬而远之,好像说是有问题的,就一直用的模拟iic实现,今天用sht30试了一下,发现基于cubemx来配置iic还挺方便的。现做如下记录首先是硬件平台:stm32f103vet6指南者先总结一下步骤cubemx配置->SHT30_Init(选择模式)->reset->利用Init的返回值判断是否成功->读取->数据拼接涉及到的自己写的函数有
转载
2024-02-29 22:01:11
157阅读
例子:实现串口uart通讯一.搭建STM32CubeMX开发环境1.安装固件库选择自己的开发板固件 ,这里我使用的是f103c6。2.工程创建1.点击file->new project建立工程2.搜索型号,选择合适的型号进行工程建立3.进行系统调试及基准时钟配置。点击System Core下拉栏中的SYS。选择debug调试接口。选择serial WrieSW模式就选择serial
转载
2024-10-24 14:33:38
221阅读
三、STM32CubeMX基础配置上一回讲解了STM32CubeMX基础配置的前一部分,当前已经修改了PACK存放路径,并且初步新建工程,来到了以下界面:3. 配置工程修改与修改PACK存放路径一样,在这里也是极力推荐进行相关修改后再生成工程。一方面,所谓“工欲善其事必先利其器”,进行配置之后,能够使接下来的步骤免去诸多麻烦;另一方面,在此配置过程中,也可以对配置细节有所了解和理解。具体步骤如下:
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、新建CubeMX工程二、开始工程配置1.配置引脚模式2.定时器1配置(定时1s)3、中断向量配置4、系统时钟配置5、创建工程6、MDK工程6、下载程序总结前言经过第一次学习笔记,我们已经掌握了如何新建CubeMX工程,并且点亮了第一个LED灯,本次实验将带领大家利用CubeMX配置定时器,让LED灯闪烁起来。提示:以下
文章目录IIC总线上挂载多个从机的程序实现IIC简介:1、项目的硬件参考电路:2、程序实现:2.1、程序框架设计:2.2 IIC 总线接口程序实现:2.3 加速度传感器的配置:2.4 气压传感器的配置,可以仿写加速度传感器的实现:2.5气压器的处理测试程序3、重写IIC的读写程序总结: IIC总线上挂载多个从机的程序实现IIC简介:1、I2C总线具有两根双向信号线,一根是数据线SDA,另一根是时
简言我之前学linux的时候,觉得linux的命令很酷,最近又有写代码的热情,于是手撸了一个串口终端。初次使用介绍特性像终端一样使用输入niubi后,键入回车,输出自己写的回调函数中的内容。支持tab键补全按下n后按下tab键后,到库中匹配关键词,匹配到niubi,显示到下一行。当有多个关键词可以匹配时,提示匹配关键词,并在新的一行显示刚刚输入的内容。支持Backspace键当输入有误时,可以按B
本次实验I2C总线传输I2C分为硬件I2C和模拟I2C。其中硬件I2C是单独的I2C硬件驱动,有固定的引脚,和一般芯片驱动使用一样需要操作其寄存器进行数据收发而不用知道I2C的协议内容,灵活度较低但效率高;而模拟I2C是根据I2C协议、时序图,自定义引脚按照协议进行传输,较为灵活但效率较低。使用HAL库+Proteus进行硬件I2C仿真时失败,所以选择更加普适的模拟I2C。 工具 软件
基于IIC和SPI协议的温湿度采集与OLED显示stm32f103外接AHT20进行温度采集IICOLED显示 stm32f103外接AHT20进行温度采集IIC所谓硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚bai也是专用的;软件I2C一般是用GPIO管脚,用软件控制管脚状态以模拟I2C通信波形。 硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接
一、IIC简介IIC协议是飞利浦公司开发的,只需要两根线(SDA SCL)的一个通讯协议。多半用于IC之间的通信,通信距离短。物理层特点:(1)支持设备总线,“总线”是指多个设备共用通信线,就是可以一个主机连接多个从机,从机都挂载在同一条通信线上,每个从机都有自己的地址。(2)总线(SDA SCL)通过上拉电阻接到电源.当总线空闲时,会输出高阻态,当总线挂载多个从机时,总线都空闲时,由上拉电阻把总
SPI通信协议SPI简介SPI是一种高速的、全双工、同步的串行通信总线,并且在芯片管脚上只占4个引脚: MOSI:主输出从输入;(Master Output, Slave Input) MISO:主输入从输出;(Master Input, Slave Output) SCK:时钟线(Serial Clock) CS:片选信号(Slave Select) SPI可通过4根线实现全双工通信:SPI也可
IIC总线可以驱动很多器件,比较常见的有OLED、EEPROM存储器(AT24C02)、温度传感器(LM75A)、温湿度传感器(DHT11)等。有关IIC总线协议的基本原理可以看我之前的文章介绍。这一次总结一下IIC驱动OLED的实现过程,实现简单的中英文和图片显示。(有关IIC的时序基本函数参考我之前的博客)嵌入式开发中最常用的显示屏主要有一下几种:(1)TFTLCD,它的特点是屏幕可以做到很大
转载
2024-07-23 14:01:52
294阅读
文章目录前言一、CubeMX配置(RTC相关)1.使能RTC:2.进制配置:3.初始时间配置:4.日期配置:5.闹钟配置:二、代码1.获取时间2.设置闹钟3.闹钟中断函数三、实验结果总结 前言相关说明:开发板:CT117E-M4(STM32G431RB 蓝桥杯嵌入式比赛板) 开发环境: CubeMX+Keil5CubeMX配置:一、CubeMX配置(RTC相关)1.使能RTC:三个步骤(对应图中
在前面一章我们已经铺垫了I2C的使用流程,下面我们就按照I2C的通讯流程写对应的代码,这个流程应该严格按照参考手册给出的定义 上面两幅图就是I2C通讯的流程master代码流程I2C的代码流程比较复杂,我们一个个函数来说初始化首先是初始化void i2c_init(I2C_Type *base)
{
base->I2CR &= ~(1<<7)