STM32物联网项目
文章平均质量分 86
项目以STM32F103ZET6为主控芯片,使用HAL库进行开发,CubeMX软件进行外设初始化,VSCode软件进行代码编写,KEIL软件进行编译调式,学习各模块的使用,提高开发能力
ONE_Day|
这个作者很懒,什么都没留下…
展开
-
STM32-CAN配置与库函数解析,实现环回模式通信
1、配置过滤器CAN_FilterTypeDef结构体就是过滤器的一些参数设置2、发送数据CAN_TxHeaderTypeDef结构体是对发送报文进行组帧,aData数组存放着要发送的数据,pTxMailbox指针是返回控制器使用了哪个邮箱进行发送3、中止发送请求4、获取空邮箱的个数5、接收数据RxFifo指定用于接收报文的FIFO缓存,CAN_RxHeaderTypeDef结构体定义接收报文的格式,aData数组存放接收到的报文6、获取接收FIFO满的个数。原创 2023-02-21 23:36:52 · 3006 阅读 · 3 评论 -
STM32-CAN控制器介绍
对CAN接口部分重要知识点进行记录,更详细的需要查看参考手册STM32的CAN接口叫做bxCAN,bxCAN是基本扩展CAN(Basic Extended CAN)的缩写,它支持CAN协议2.0A和2.0B。它的设计目标是,以最小的CPU负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。对于安全紧要的应用,bxCAN提供所有支持时间触发通信模式所需的硬件功能时间触发模式。原创 2023-02-21 23:00:13 · 3266 阅读 · 0 评论 -
万用表电阻档测量电阻并读数
读数:200欧档位的值直接从屏幕读取,位是欧,2K,20K,200K这三个档位的读数也是从屏幕读取,单位是K欧,之所以设置三个K欧级的档位,主要是这三人档位的测量精度不一样,M欧级的同理。电阻的档位表示的是万用表的最大量程,例如,200欧档最大可以量200欧以内的阻值,2K欧最大可以量2K欧的阻值,后面同理。只有三个单位,欧,千欧,兆欧,当显示数值稳定下来时,调到哪个单位,则显示的数值加单位就是电阻的阻值,要注意看小数点的位置。2000欧(0.002M欧 = 2K欧= 2000欧)原创 2022-10-16 20:02:05 · 8812 阅读 · 0 评论 -
STM32物联网项目-SPI FLASH编程
W25Q64JV的芯片手册是英文的,用软件翻译了一下,有些地方翻译得不准确,大概了解一下即可,例如芯片的工作电压在2.7V到3.6V的电源上,电流消耗地至断电1uA,每个页面256字节,一次最多可编程256字节,通信接口有SPI。原创 2022-09-08 11:10:45 · 1602 阅读 · 2 评论 -
STM32物联网项目-SPI通信总线
SPI 是由摩托罗拉(Motorola)公司开发的全双工同步串行总线,是微处理控制单元(MCU)和外围设备之间进行通信的同步串行端口。主要应用在EEPROM、Flash、实时时钟(RTC)、数模转换器(ADC)、网络控制器、MCU、数字信号处理器(DSP)以及数字信号解码器之间。SPI 系统可直接与各个厂家生产的多种标准外围器件直接接口,一般使用4 条线:串行时钟线SCLK、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI 和低电平有效的从机选择线CS通信线说明CS。原创 2022-09-07 17:27:09 · 295 阅读 · 0 评论 -
STM32物联网项目-低功耗模式
以WFI进入睡眠模式后,是可以通过任意一个中断来唤醒的,这里就需要注意了,平时使用的延时函数HAL_Delay()是以SysTick滴答定时器来作为时基的,并且NVIC中默认已经开启了SysTick的中断,如果直接在主函数中调用HAL_PWR_EnterSLEEPMode函数进入睡眠模式的话,SysTick滴答定时器的中断就会立马唤醒系统,达不到低功耗的效果;进入睡眠模式的HAL库函数中,参数Regulator表示电压调节器,而睡眠模式下的电压调节器是始终打开的,那为什么还有这个参数呢?原创 2022-09-07 17:11:29 · 2676 阅读 · 0 评论 -
STM32物联网项目-窗口看门狗WWDG
储存在WWDG_CR寄存器中的数值必须在 0xFF 和 0xC0 之间,这个范围在开头链接的文章里有讲,就是要确保第7位和第6位都为1,第7位是使能窗口看门狗,第6位是窗口看门狗复位标志,剩下的第5 ~ 第0共6位,才是可以变化的计数值。因为CubeMX这次配置的参数是十进制(其实也能配置为十六进制,但是十进制更清晰点),根据上面两张图就可得知,窗口值是要设置在最大计数值和最小计数值之间的,因为计数值到达63时已经产生复位,所以窗口值要设置在127到64之间,这里配置为100,可根据实际情况来配置;原创 2022-09-07 16:18:17 · 434 阅读 · 0 评论 -
STM32物联网项目-独立看门狗IWDG
看门狗频率:40KHz / 32 = 1250Hz,也就是振动源振动1250次就定时1秒,那要定时2秒,就振动1250 * 2 = 2500次,所以重装载寄存器IWDG_RLR的设定值就为2500,这样就能使独立看门狗超过2秒后产生系统复位。在做低功耗产品时,不能使用独立看门狗,因为当系统处于待机或者停止状态时,不会进行喂狗,但独立看门狗依然会计数,就会让系统复位,无法保持低功耗模式。HAL库的独立看门狗只有两个函数,一个是初始化函数,另一个是喂狗函数,在自己的程序中调用该喂狗函数,就能实现喂狗。原创 2022-09-07 15:48:06 · 1079 阅读 · 0 评论 -
STM32物联网项目-RTC时钟
实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。执行以下操作将使能对后备寄存器和RTC的访问:1、设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟。原创 2022-09-07 15:39:43 · 2795 阅读 · 0 评论 -
STM32物联网项目-GPRS模块通信编程
原本第一版的代码每个发送AT指令的函数内容都差不多,比如检查网络状态,检查GPRS服务等,这些函数里不同的只是AT指令,应答,等待时间,除了个别函数如连接TCP服务器会有标志位的置位和定时器的清零等操作,这样相同的代码造成篇幅过长,所以进行修改优化。SIM800C通过手机卡联网,连接的是公网,自己在电脑上做实验的话,用的是局域网的网络调试助手,当在局域网内开启TCP服务器时,公网是找不到这个服务器地址的,所以需要借助一些手段,让这个内网里的服务器能被公网找到,目前知道的有两种方法。原创 2022-09-07 14:46:46 · 2844 阅读 · 0 评论 -
STM32物联网项目-GPRS模块介绍
SIM800C模块可支持4频GSM/GPRS,工作的频段为:GSM850、EGSM900、DCS1800和PCS1900 MHz。模块的尺寸只有17.6 * 15.7 * 2.3 mm,几乎可以满足所有用户应用中的对空间尺寸的要求。模块的物理接口为42引脚的SMT焊盘,提供了模块的所有硬件接口。两路串口(一路三线串口与一路全功能串口)一路USB接口,便于用户调试、下载软件一路音频接口,包含麦克风输入和受话器输出可编程的通用输入输出接口(GPIO)一路SIM卡接口。原创 2022-09-07 14:30:24 · 4549 阅读 · 0 评论 -
STM32HAL库串口和DMA库函数调用关系
Callback函数就是用户要重写在main.c里的回调函数。再说明一下一个很重要的问题:STM32的每个串口中断有好几个(发送接收等),但只要是与串口相关的中断发生系统都会先调用个函数USART3_IRQHandler,也就是中断向量表中的那个,比如usart3的话就是USART3_IRQHandler(void),然后这个函数再调用。原创 2022-09-07 14:08:31 · 2269 阅读 · 0 评论 -
STM32使用串口空闲中断(IDLE)和 DMA接收一串数据流
空闲的定义是总线上在一个字节的时间内没有再接收到数据,USART_IT_IDLE空闲中断是检测到有数据被接收后,总线上在一个字节的时间内没有再接收到数据的时候发生的。串口空闲中断(UART_IT_IDLE):STM32的IDLE的中断在串口无数据接收的情况下,是不会一直产生的,当清除IDLE标志位后,必须有接收到第一个数据后,才开始触发,一但接收的数据断流,没有接收到数据,即产生IDLE中断。IDLE位不会再次被置高直到RXNE位被置起(即又检测到一次空闲总线)。原创 2022-09-06 17:32:52 · 16677 阅读 · 3 评论 -
STM32物联网项目-通过ESP12S模块连接TCP服务器
STM32通过串口与ESP-12S模块通信,控制模块连接路由器,然后连接服务器,将实战板的SHT30获取到的环境温湿度值上传到服务器,服务器可以下发指令,控制实战板的蜂鸣器开启与关闭,控制继电器吸合断开。原创 2022-09-06 17:27:10 · 2360 阅读 · 1 评论 -
STM32物联网项目-RS485通信(Modbus协议)
RS485介绍:http://t.csdn.cn/Jbw64Modbus协议:http://t.csdn.cn/mgioXRS-485通信使用到了串口3,TX接到SP3485芯片的DI,RX接到RO,芯片使能脚RS485_DE_nRE接到PG10此外实验还使用到了SHT30数字温湿度传感器获取环境温湿度,继电器和蜂鸣器可通过触摸按键1和触摸按键2控制启动和关闭,数码管实时显示温湿度因为Modbus协议多用于工业领域,环境会多干扰,所以波特率常用9600,串口3就配置为9600开启串口3的发送DMA和接收DM原创 2022-09-06 17:12:04 · 7566 阅读 · 3 评论 -
STM32物联网项目-HMI串口屏
选择字高,编码格式,字体,范围有ASCII字符,所有字符和指定字符,所有字符因为包含的字符多,想到什么字就可以写什么字,所以最后编译出来的文件就大,烧录到屏幕上时就比较费时间,这次实验使用指定字符,选择指定字符后在输入框里写入想要的字符,后面的控件就能使用这些字符,没有写到的则不能使用,比如指定字符没有“串口”两个字,则控件文本就不能写“串口"两个字。click表示点击,b0是控件的名称,也可改为控件id,1是按下,0是弹起,发送这两个指令是则表示b0按钮先被按下,再弹起。原创 2022-09-06 16:58:59 · 5788 阅读 · 2 评论 -
STM32物联网项目-双极性步进电机
因为单四拍的步距角是7.5度,也就是说按A+,B+,A-,B-这样线圈通电顺序就可以让步进电机转动7.5度,又因为该步进电机没有减速比,所以360/7.5 = 48,48个这样的单四拍就可以让电机转动一圈,双四拍的同理。一个四拍或八拍都是让线圈轮流通电,若脉冲是A+,就让A+引脚输出高电平,A-引脚输出低电平,这样电流就从A+流向了A-,驱动转子转动。与单极性的步进电机一样,有三种驱动方式,单四拍、双四拍、八拍。A+表示电流从A+流向A-,A-表示电流从A-流向A+A+ 流向 A-或者A- 流向 A+原创 2022-09-06 16:45:25 · 1556 阅读 · 1 评论 -
STM32物联网项目-单极性步进电机28BYJ-48
而八拍就类似这样的节拍:A-AB-B-BC-C-CD-D-DA,因为有两个绕组同时导电的情况,对转子的吸力一样,这样就又会产生一个新的转动角度,所以转子就会比原来4个节拍的多了4个转动的角度,这样再转一圈,就要(4+4)* 8 = 64个节拍了,所以360度/64 = 5.625度,这5.625度是步进电机转动的角度,也就是是下面讲到的输出轴的转动角度;因为八拍让转子转一圈的脉冲数是64,单四拍或双四拍让转子转一圈的脉冲数都是32,是八拍的一半,在减速比都是64的情况下,让步进电机转一圈,则。原创 2022-09-06 16:41:42 · 3912 阅读 · 1 评论 -
STM32物联网项目-有刷直流电机
12V低饱和电压驱动正/反向电动机驱动器LV8548MC是一种2通道低饱和电压正/反向电机驱动芯片。适用于12V系统产品,可驱动两台直流电机,一台采用并联方式的直流电机,或者可全程和半步驱动步进电机。供电电压为:4 ~ 16V。原创 2022-09-06 16:24:10 · 1633 阅读 · 0 评论 -
STM32物联网项目-SHT30温湿度采集(IIC通信)
SHT3x湿度传感器系列包括低成本版本SHT30、标准版本SHT31,以及高端版本SHT35。SHT3x湿度传感器系列结合了多种功能和各种接口(I2C、模拟电压输出),应用友好,工作电压范围宽(2.15至5.5 V),适合各类应用。SHT3x建立在全新和优化的CMOSens® 芯片之上,进一步提高了产品可靠性和精度规格。SHT3x提供了一系列新功能,如增强信号处理、两个独特和用户可选I2C地址、一个可编程温湿度极限的报警模式,以及高达1 MHz的通信速度。DFN封装的占位面积为2.5 × 2.5 mm2,高原创 2022-09-06 11:53:40 · 8135 阅读 · 1 评论 -
STM32物联网项目-DMA使用介绍(ADC+DAC)
还有一个仲裁器来协调各个DMA请求的优先权。使用DAC输出一个正弦波,使用DMA后,DMA就会自动将要输出的数据搬运到DAC输出寄存器,因为产生正弦波需要一定的周期,则这个周期就用定时器来设定,当定时器计数溢出时,就驱动DMA搬运内存数据到DAC,形成正弦波,整个过程不用CPU干预。因为DMA中断是在DMA完成一次搬运后去通知CPU的,本次实验ADC的转换是很快速的,如果每次搬运完一个数据都去中断CPU,则CPU的工作效率就会减低,而DAC也是用定时器控制周期输出一个正弦波,也不需要中断CPU;原创 2022-09-06 11:34:32 · 3398 阅读 · 2 评论 -
STM32物联网项目-DAC输出模拟量以及正弦波
STM32 的 DAC 模块(数字/模拟转换模块)是 12 位数字输入,电压输出型的 DAC。DAC 可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合使用。DAC 工作在 12 位模式时,数据可以设置成左对齐或右对齐。DAC 模块有 2 个输出通道,每个通道都有单独的转换器。在双 DAC 模式下,2 个通道可以独立地进行转换,也可以同时进行转换并同步地更新 2 个通道的输出。DAC 可以通过引脚输入参考电压 VREF+以获得更精确的转换结果。原创 2022-09-06 11:17:20 · 4706 阅读 · 0 评论 -
STM32物联网项目-ADC采集实验板板温度(NTC热敏电阻)
STM32 拥有 1~3 个 ADC(STM32F101/102 系列只有 1 个 ADC),这些 ADC 可以独立使用, 也可以使用双重模式(提高采样率)。STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有 18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。原创 2022-09-05 21:36:00 · 6408 阅读 · 2 评论 -
STM32物联网项目-高级定时器软件仿真输出互补PWM信号
再编译,查看PWM波形的变化,可以看到上下PWM波形并不完全互补,当上面通道要输出高电平导通MOS管时,会延时一段时间,等待下面通道输出低电平完全关闭MOS管后,再开启上面的MOS管,这段延时的时间就叫死区时间。点击全速运行,过一会就能看到输出的PWM波形了,两个通道成互补状态,上面通道输出高电平,下面通道输出低电平,点击Cursor游标选项,可以测量一个PWM信号的周期是多少,看是否是前面设定的值。预分频系数为71,即晶振振1次1us,自动重载值为99,即PWM输出周期为100us,也就0.1ms。原创 2022-09-05 12:46:45 · 2008 阅读 · 1 评论 -
STM32物联网项目-高级定时器功能介绍
还是上面那两个MOS管,如果用互补输出会存在一个问题,本来互补输出是想要两个MOS管只能有一个导通,但MOS管在实际电路中因制作工艺精度的不同,或者其他因素的影响,导致导通和截止需要一定的时间,可能会存在上面MOS管在导通的瞬间,下面的MOS管仍然处于导通状态,还没来得及截止,反过来也一样,两个MOS管在某一瞬间同时导通,电流流过MOS管,导致管烧毁。有两路输出波形,它们成互补状态,当上面波形输出高电平时,下面波形输出低电平,当上面波形输出低电平时,下面波形就输出高电平。所以这刹车功能是一个硬件保护功能。原创 2022-09-05 11:35:27 · 2260 阅读 · 0 评论 -
STM32物联网项目-PWM驱动蜂鸣器
打开CubeMX的NVIC配置界面可以看到,System tick timer的默认抢占优先级是0,自己配置的外部中断是1,定时器6中断是2,数字越小则优先级越大,所以HAL_Delay延时函数在外部中断或定时器中断中能起作用。因为外部中断或者定时器中断都是在中断处理过程中被HAL_Delay的中断打断的,说明HAL_Delay的中断优先级是比这两者高的,不然HAL_Delay的延时中断打断不了外部中断或者定时器中断,就没有延时的作用。原创 2022-09-05 11:27:52 · 4001 阅读 · 1 评论 -
STM32物联网项目-触摸按键
所以触摸芯片不用单片机引脚控制,当检测到触摸按键被触摸时,就会在对应的输出引脚输出低电平,再给到32单片机的引脚,所以在程序中只需将引脚配置为外部中断下降沿检测,检测引脚电平状态就知道哪个触摸按键被按下了。继电器的触发函数在Relay.c文件中,比较简单,单片机引脚输出高电平则继电器吸合,输出低电平则继电器断开,是按键4中的按键动作。触摸按键1检测函数,与STC15实战的检测函数一样,这里检测单击和长按2秒,其他按键检测与按键1的一样,只是按键号不同而已。在外部中断回调函数中改变按键的标志位。原创 2022-09-05 11:27:07 · 1302 阅读 · 2 评论 -
STM32物联网项目-串口打印
HAL_UART_Transmit函数的第一个参数是要发送接收的串口号,第二个参数是要发送字符的指针,第三个参数是发送的字符个数,第四个参数是发送的超时时间,单位为毫秒。重复采样(Over Sampling):对电平状态重复采样,提高准确性,默认16 Samples,无法修改。在程序框架的public.c文件中,对 printf 函数进行重映射操作,重写 fputc函数。在自己的初始化函数中,用 printf 函数往串口1打印初始化信息。系统运行函数中,串口输出状态机运行次数,输出每次运行的状态。原创 2022-09-05 11:26:34 · 1698 阅读 · 0 评论 -
STC32物联网项目-基本定时器
HAL_TIM_PeriodElapsedCallback函数体在stm32f1xx.hal_tim.c文件中被定义,_weak修饰了函数,说明这个函数是个弱函数,当没有被重构时,如果函数被调用,调用的是系统的这个没有具体功能的函数体,因为生成的代码并不知道开发者要干嘛,所以是个空函数;在回调文件中重写HAL_TIM_PeriodElapsedCallback函数,该函数是定时器的中断回调函数,重写后,调用的就是下面这个让LED灯电平翻转的函数,并不是系统原本的空函数。原创 2022-09-05 11:26:05 · 679 阅读 · 0 评论 -
STM32物联网项目-回调函数
STA_Machine.c状态机源文件通过结构体变量LED,调用LED_Fun函数,并传入第一个参数LED灯编号,然后第二个参数就传入具体实现功能的函数,因为函数名就等于函数的首地址,所以把LED_OFF函数的首地址给到了函数指针CallBack,当LED_Fun函数被调用,则LED_OFF函数也会紧接着被调用,从而实现回调函数机制。函数Fun1调用函数Fun2,同时将函数Fun3作为形参传递给Fun2,此时,Fun1为应用层函数,Fun2为中间层函数,Fun3为回调函数,回调函数是一种说法而已。原创 2022-09-05 11:24:57 · 1375 阅读 · 0 评论