STM32开发
文章平均质量分 92
相当哇塞!本专栏从零基础环境搭建到功能实现带领大家进入STM32世界。
现提供功能:各功能详解,测试工具使用
(订阅本专栏前100名小伙伴 29.9)
专栏文章不断更新优化,大家小小的支持是本猿创作的最大动力。
Bazinga bingo
自律的顶端是孤独,孤独的顶端是自由
展开
-
STM32 从入门到精通系列讲解 - 总目录
👦 作者介绍:Bazinga bingo,专注C语言应用硬核干货分享,潜心修炼,虚心学习,立志做嵌入式相关赛道的Top。📕 本文收录于《STM32开发》专栏,包含STM32内部模块介绍、片内资源开发、不同通信总线应用、屏幕显示等功能性开发。每篇文章包含相关知识点、代码编程详解以及使用测试工具进行结果分析对比。📘 本专栏从开发环境搭建到基础理论知识点掌握和运用都有全套详细解析,小伙伴们通过本专栏内容能够快速上手STM32相关功能开发,轻松掌握嵌入式编程。原创 2023-05-06 22:47:15 · 1936 阅读 · 1 评论 -
STM32开发(一)虚拟机 + VScode + STM32Cube 开发STM32|CSDN创作打卡
文章目录环境配置安装编译器安装make配置软件CubeMx生成Makefile编译下载代码,使用STLink安装openocd在工程下面建立配置文件config.cfg运行下载方法一、使用xx.bin文件下载方法二、使用xx.hex下载字符编码转换环境配置进入官网下载gcc-arm-none-eabi根据虚拟机环境选择对应编译器安装安装编译器参考gcc编译器安装步骤,安装好后查看版本安装makesudo apt-get install make配置软件CubeMx生成Makefile原创 2022-02-09 18:51:11 · 3026 阅读 · 2 评论 -
STM32开发(二)CubeMX详解构建基本框架
玩过STM32单片机的朋友都知道,以前的时候大家在做开发时基本都是基于官方提供的库函数,当然也有寄存器版本的库函数,两者是类似的。基于这样的背景,STM官方又推出了STMCube这样的IDE工具,进一步简化了开发的难度,使所有的HAL库和LL库开发变得非常容易,可以基于界面话的操作,自动生成,大大提高了开发的效率。注:高速时钟(硬件上是用过外部晶体管和电容产生的时钟)低速时钟(实时时钟可以配置,这里项目不需要disable,不用通过IO输出时钟)注:输出速度若是PWM波可以选择高速,这和功耗成正比。原创 2023-02-04 15:12:17 · 1977 阅读 · 0 评论 -
STM32开发(三) 使用printf 重定位到串口输出|CSDN创作打卡
文章目录背景KEIL-MDK环境下printf重定位串口输出第一步:在KEIL-MDK中使用MicroLIB如图中勾选第二步:STM32Cube MX异步配置第三步:KEIL代码演示(代码使用Cube)注意事项在GCC中使用标准库重定向printf第一步: STM32Cube MX中的串口配置第二步: VScode代码演示 (代码使用Cube)背景通过USART1向计算机的串口调试助手打印数据,或者接收计算机串口调试助手的数据。UART是一种通用的串型数据总线,异步通讯(没有时钟线),全双工(同时进行原创 2022-02-11 07:27:20 · 1694 阅读 · 0 评论 -
STM32开发(四)STM32F103 数据手册 —— CAN解析
bxCAN主要特点支持CAN协议2.0A和2.0B主动模式波特率最高可达1兆位/秒支持时间触发通信功能 (不通过设备ID号进行仲裁,设置每个挂载在总线上的设备通信时间)发送3个发送邮箱发送报文的优先级特性可软件配置记录发送SOF时刻的时间戳接收3级深度的2个接收FIFO可变的过滤器组标识符列表FIFO溢出处理方式可配置记录接收SOF时刻的时间戳时间触发通信模式禁止自动重传模式16位自由运行定时器可在最后2个数据字节发送时间戳双CANCAN1:是主bxC原创 2022-02-22 07:26:21 · 4345 阅读 · 0 评论 -
STM32开发(五)STM32F103 通信 —— CAN通信编程详解
USE_HAL_CAN_REGISTER_CALLBACKS宏定义为0,则调用HAL_CAN_RxFifo0MsgPendingCallback回调函数(这个函数是弱化函数,重构该函数之后就会调用重构函数)(2)在HAL_CAN_IRQHandler函数中判断中断标志位为CAN_IT_RX_FIFO0_MSG_PENDING(挂起中断,在初始化中使能挂起中断)CAN接收中断包括:挂起中断(只要有信息就触发中断)、满中断(FIFO都满了触发中断)、溢出中断(只有FIFO都满后还接收到数据就会触发中断)原创 2023-02-07 19:34:59 · 11564 阅读 · 5 评论 -
STM32开发(六)STM32F103 通信 —— RS485 Modbus通信编程详解
本实验基于STM32F103开发,实现 通过RS-485实现Modbus通信。Modbus是主从方式通讯,不能同步进行通信,总线上每次只有一个数据进行传输。主机发送,从机应答,主机不发送,总线上就没有数据通讯。MODBUS 协议允许在各种网络体系结构内进行简单通信。原创 2023-03-05 16:12:45 · 29349 阅读 · 24 评论 -
STM32开发(七)STM32F103 显示 —— 数码管显示 详解
初始化过程中设置数据命令是Disp_Addr_Mode_Auto,使用的是地址自增模式。时序根据芯片手册,实现数码管连续显示。软件开发使用虚拟机 + VScode + STM32Cube 开发STM32,在虚拟机中直接完成编译下载。本实验是基于STM32F103开发 通过GPIO模拟时序 实现TM1620数码管显示。通过调用 Display.Disp 接口控制数码管显示。开始我的show time。主控:STM32F103ZET6。控制数码管芯片:TM1620。原创 2023-03-08 20:21:50 · 6044 阅读 · 3 评论 -
STM32开发(八)STM32F103 片内资源 —— 基本定时器中断 详解
(2)当两个中断源的抢占式优先级相同时,如果有低响应优先级中断正在执行,那么高响应优先级的中断要等待已被响应的低响应优先级的中断执行结束后才能得到响应。每一个中断都有一个专门的寄存器来描述该中断的抢占式优先级和响应式优先级。4位的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是响应优先级。(1)当两个中断源的抢占式优先级相同时,高响应优先级的中断优先被响应,这两个中断将没有嵌套关系;具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。原创 2023-03-16 22:27:15 · 681 阅读 · 0 评论 -
STM32开发(九)STM32F103 通信 —— I2C通信编程详解
I2C时序由空闲时序、开始时序、停止时序、发送一个字节时序、接收一个字节时序,这四种时序部分组成。0x00 0xd6:读取第二个数据为0xd6,温度值=214/10=21.4℃ (发送代码将值乘以10,这里需要除以10获取真实温度值)只有输出高电平的时候,N-MOS管截止,这时IO口就能作为输入使用,获取IO口的状态。I2C读字节时序:1、主机接收1个字节;注:在SCL低变高的时候数据变化,在SCL高电平时保持数据变化,可采到接收值。开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。原创 2023-03-18 16:30:36 · 2701 阅读 · 1 评论 -
STM32开发(十)STM32F103 通信 —— SPI通信编程详解
本实验通过STM32F103 的SPI功能,实现对W25Q64JVSSIQ (Flash芯片)芯片擦除,读数据,写数据等操作。软件开发使用虚拟机 + VScode + STM32Cube 开发STM32,在虚拟机中直接完成编译下载。Flash芯片:W25Q64JVSSIQ。主控:STM32F103ZET6。原创 2023-04-01 19:19:31 · 2540 阅读 · 1 评论 -
STM32开发(十一)STM32F103 片内资源 —— ADC 详解
12位ADC是一种逐次逼近型模拟数字转换器。有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。原创 2023-04-06 22:54:42 · 1052 阅读 · 0 评论 -
STM32开发(十二)STM32F103 功能应用 —— NTC 温度采集
根据数据手册中的数据,这个参照电压的典型值是1.20V,最小值是1.16V,最大值是1.24V。分辨率越高,就可以将满量程里的电平分出更多份数,得到的结果就越精确,得到的数字信号再用DAC转换回去后就越接近原来输入的模拟值。每个STM32芯片都有一个内部的参照电压,相当于一个标准电压测量点,在芯片内部连接到ADC1的通道17。比如:一个10位的ADC,其所能分辨的最小量化电平为参考电平(满量程)的2的10次方分之一。所以,对于给定的一个具体ADC器件,其分辨率值是固定的。Vadc :输出电压值Vadc。原创 2023-04-07 20:27:36 · 3277 阅读 · 0 评论 -
STM32开发(十三)STM32F103 片内资源 —— 外部中断 按键 详解
软件开发使用虚拟机 + VScode + STM32Cube 开发STM32,在虚拟机中直接完成编译下载。PA0-PG0引脚都能触发EXTI0中断,当是注意的是,如EXTI0有选择位,选择哪个引脚线上的中断。配置四个按键外部触发等级。(数值越小,优先等级越高)并且有中断挂起就会触发NVIC中断控制产生中断事件。本实验以按键为例确定外部触发模式为:下降沿触发。所以在设计原理图的时候一定要注意。若有触发信号产生就会请求挂起(配置。配置则会结合触发信号产生脉冲发生器。获取到也可以通过配置。原创 2023-04-15 07:52:45 · 1064 阅读 · 0 评论 -
STM32开发(十四)STM32F103 数据手册 —— 通用定时器 PWN 详解
在向下模式中,计数器从自动加载值(TIMx_ARR计数器的内容)开始向下计数,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。是预先装载的,写或读自动重装载寄存器将访问预装载寄存器(根据在TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)的设置)预装载寄存器的内容被立即或在每次的更新事件UEV时传送到影子寄存器。在中央对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;更新事件也可以由软件产生。原创 2023-04-15 12:51:33 · 549 阅读 · 0 评论 -
STM32开发(十五)STM32F103 片内资源 —— 通用定时器 PWN 无源蜂鸣器 详解
软件开发使用虚拟机 + VScode + STM32Cube 开发STM32,在虚拟机中直接完成编译下载。本实验通过STM32F103 的通用定时器 PWN功能,实现对无源蜂鸣器控制。实验效果:PWM频率从500Hz到4KHz变化,占空比为对应的一半。主控:STM32F103ZET6。该部分可参考:软件开发环境构建。原创 2023-04-17 23:02:09 · 658 阅读 · 0 评论 -
STM32开发(十六)STM32F103 片内资源 —— 实时时钟RTC 详解
因此代码里的需要在串口中显示的中文,会以UTF-8的形式编码。(3)2个分离的时钟:用于APB1接口的PCLK1和RTC时钟(RTC时钟的频率必须小于PCLK1时钟频率的四分之一以上)。后备区域包括(RTC时钟预分配器、计数器),这里注意的是闹钟,RTC溢出,秒中断在断电之后不起作用。vscode 编写代码默认是以UTF-8格式编写的,但是SSCOM串口工具是以GBK格式显示的。(2)32位的可编程计数器,可用于较长时间段的测量。(1)可编程的预分频系数:分频系数最高为2^20。原创 2023-04-21 21:59:25 · 1379 阅读 · 1 评论 -
STM32开发(十七)STM32F103 片内资源 —— 独立看门狗 IWDG 详解
STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;软件开发使用虚拟机 + VScode + STM32Cube 开发STM32,在虚拟机中直接完成编译下载。独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。看门狗功能处于VDD供电区,即在停机和待机模式时仍能正常工作。使能独立看门狗,40kHz的输入时钟(LSI)将会开启。触摸按键相关代码可参考。原创 2023-04-27 07:27:41 · 853 阅读 · 0 评论 -
STM32开发(十八)STM32F103 片内资源 —— 窗口看门狗 WWDG 详解
如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以被用于重装载计数器以避免WWDG复位。计数值刷新必须在看门狗刷新窗口中刷新,如果计数值小于3Fh或者大于W[6:0]区域刷新都会产生系统复位。这是由于计数值最低到0x40,也就是说低于0x40就复位,则T[6:0]-0x40 = T[5:0]+1。在系统在待机、停机、睡眠阶段还会起效果,这就会导致在做低功耗的时候,看门狗还是会运作复位。时钟来源于系统时钟,因此系统在待机、停机、睡眠阶段窗口看门狗会停止工作。原创 2023-05-01 09:15:00 · 1523 阅读 · 1 评论 -
STM32开发(十九)STM32F103 数据手册 —— 低功耗模式解析
系统复位或上电复位后,微控制器进入运行模式。在运行模式下,CPU通过HCLK提供时钟,并执行程序代码。系统提供多种低功耗模式,可以在CPU不需要运行时进入低功耗模式节省功耗。原创 2023-05-17 12:00:00 · 1105 阅读 · 0 评论 -
STM32开发(二十)STM32F103 片内资源 —— 低功耗模式代码解析
低功耗模式低功耗模式:睡眠模式、停止模式、待机模式睡眠模式:CPU停止工作、所有外设包括CPU外设(NVIC、系统时钟Sys Tick仍然在运行)停止模式:所有时钟都停止待机模式:1.8V电源都关闭除了进入三种低功耗模式来节省功耗之外,还能通过下面方式来降低运行模式的功耗:1、降低系统时钟速度2、不使用APBx和AHBx外设时,将对应的外设时钟关闭原创 2023-05-19 22:01:00 · 967 阅读 · 0 评论 -
STM32开发(二十一)添加代码静态检测详解 —— Cppcheck工具
静态代码检查是指在不运行程序的条件下,进行程序分析的方法。有些程序分析需要在程序运行时才能进行,这种程序分析称为动态程序分析。在编译代码的情况下查出问题,保证代码的准确性。在实际的项目开发中,编译调试只是验证功能是否正确。若功能正确的情况下并不能保证此功能相关的代码是可靠的,不存在bug风险的。有些bug是很难只凭借测试功能测出来的(如:数据越界),所以使用cppcheck可以静态的检查代码,从而提高代码可靠性。本章节详细介绍在此项目中如何安装Cppcheck并将工具集成到Makefile中。原创 2023-05-22 12:00:00 · 743 阅读 · 0 评论 -
STM32开发(二十二)STM32F103 高级外设 —— 灵活的静态存储器控制器FSMC 详解
FSMC模块提供能够与同步或异步存储器和16位PC存储器卡的接口**它的主要作用是:**● **将AHB传输信号转换到适当的外部设备协议**● **满足访问外部设备的时序要求**所有的外部存储器共享控制器输出的地址、数据和控制信号,每个外部设备可以通过一个唯一的片选信号加以区分。 FSMC在任一时刻只访问一个外部设备。原创 2023-05-25 22:07:24 · 1106 阅读 · 1 评论 -
STM32开发(二十三)STM32F103 高级外设 —— TFT_LCD屏框架以及填充颜色 详解
为什么TFT-LCD能使用FSMC?满足两者匹配的两因素:1、信号线匹配,2、时序匹配TFT-LCD之所以能够使用FSMC是因为它的接口跟SRAM很相似:SRAM的接口一般包括: 地址线、数据线(8080并口)、片选、写信号线、读信号线TFT-LCD的接口一般包括: RS(命令数据控制线,用来区分发送的是命令还是数据),数据线(8080并口)、片选、写信号线、读信号线对比两者的接口线可以发现,SRAM有地址线,而TFT-LCD没有地址线,其他线都相同。由于RS线原创 2023-05-26 21:25:10 · 1911 阅读 · 0 评论 -
STM32开发(二十四)STM32F103 高级外设 —— TFT_LCD屏显示字符或字符串 详解
一、基础知识点本实验用过STM32控制TFT_LCD屏显示,显示字符或字符串的实验。了解整个TFT_LCD驱动框架的实现,以及数据如何从STM32流向屏幕,并显示出来的。本章知识点:1、TFT_LCD控制器 ILI9341 解析2、灵活的静态存储器控制器FSMC 详解3、PCtoLCD2002软件全功能使用详解本实验基于上一节LCD框架文章进行编辑添加代码,小伙伴们可结合下面的文章进行本章代码学习:1、STM32开发(二十三)STM32F103 高级外设 —— TFT_LCD屏框架以及填充原创 2023-06-09 23:04:13 · 2000 阅读 · 0 评论 -
STM32开发(二十五)STM32F103 高级外设 —— TFT_LCD屏显示中文 详解
本实验用过STM32控制TFT_LCD屏显示,显示中文的实验。了解整个TFT_LCD驱动框架的实现,以及数据如何从STM32流向屏幕,并显示出来的。原创 2023-07-07 07:45:43 · 1762 阅读 · 0 评论 -
STM32开发(二十六)STM32F103 高级外设 —— TFT_LCD屏显示图片 详解
本实验用过STM32控制TFT_LCD屏显示,显示图片的实验。了解整个TFT_LCD驱动框架的实现,以及数据如何从STM32流向屏幕,并显示出来的。原创 2023-07-12 08:12:56 · 1490 阅读 · 0 评论 -
STM32开发(二十七)STM32F103 高级外设 —— TFT_LCD屏绘制直线、矩形、圆形 详解
本实验用过STM32控制TFT_LCD屏绘制直线、矩形、圆形的实验。了解整个TFT_LCD驱动框架的实现,以及数据如何从STM32流向屏幕,并显示出来的。原创 2023-07-24 21:55:04 · 1044 阅读 · 0 评论 -
STM32开发(二十八)STM32F103 高级外设 —— 触摸校准
由于两者是线性变化的,两者存在比例关系,需要计算出比例因子xFactor和yFactor。假如LCD屏幕尺寸是240x320,触摸膜物理尺寸和LCD屏幕是一样的,但是触摸的ADC值长和宽一样的是0-4096分布的。1、屏幕上取5个点,长方形的4个点为了计算出比例因子和偏移量。屏幕的坐标原点(0,0)并不是触摸屏上的原点,会存在偏移量xOffset和yOffset。2、在屏幕上的5个位置显示十字光标,触摸时获取这5个光标的ADC值。5、根据获取到的ADC值和坐标值进行计算,获得比例因子和偏移量。原创 2023-11-09 09:00:00 · 385 阅读 · 0 评论 -
STM32开发(二十九)STM32F103 数据手册 —— 高级定时器 TIM1 TIM8详解
是指,定时器的输出信号在达到稳定状态之前,可能会出现一段短暂的时间,此时输出信号的电平可能是不稳定的或者是无效的。此时,可以使用刹车功能来停止定时器的工作,以避免定时器继续计数,浪费系统资源。是指,可以通过软件控制定时器的计数器停止计数,从而停止定时器的工作。此时,可以使用刹车功能来停止定时器的工作,以避免定时器继续计数,浪费系统资源。此时,可以使用刹车功能来停止定时器的工作,以确保系统复位时定时器的计数值为零。指的是,定时器的输出信号与另一个输出信号相反,即一个为高电平时,另一个为低电平,反之亦然。原创 2023-11-18 17:03:08 · 309 阅读 · 0 评论 -
STM32开发(三十)STM32F103 数据手册 —— 模拟/数字转换 DAC 详解
输入,正模拟参考电压VREF+ : DAC使用的高端/正极参考电压,2.4V ≤ VREF+ ≤ VDDA (3.3V)输入,模拟电源VDDA :模拟电源输入,模拟电源地VSSA:模拟电源的地线模拟输出信号DAC_OUTx:DAC通道x的模拟输出。原创 2023-11-20 09:30:00 · 342 阅读 · 0 评论 -
STM32开发(三十一)STM32F103 片内资源 —— 模拟/数字转换 DAC 正弦波 编程详解
本实验是使用STM32内部的DAC模块实现按键控制周期的正弦波输出。通过这个实验 了解DAC的功能以及其库函数的调用使用。软件开发使用虚拟机 + VScode + STM32Cube 开发STM32,在虚拟机中直接完成编译下载。STM32开发(三十)STM32F103 数据手册 —— 模拟/数字转换 DAC 详解。(2)将值存放在一个数组中,循环将这些值进行DAC转化,获得正弦波。(1)将正弦波例化,取出32个值。主控:STM32F103ZET6。(2)设置要转换的DAC值。(3)支持手动周期改变。原创 2023-11-21 09:30:00 · 278 阅读 · 0 评论