STM32F7之HAL库学习
文章平均质量分 52
南国枫火
这个作者很懒,什么都没留下…
展开
-
基于STM32F746的MQTT实现
一.简述MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物...原创 2019-11-25 11:58:32 · 1282 阅读 · 0 评论 -
13-HAL库DMA系统总结
1.间接DMA:Direct Memory Access,直接存储访问,实现数据在外设与存储器或存储器之间高速访问,数据移动过程无需CPU操作控制,因此可以大大解放CPU负担。外设(ADC、SPI、I2C、DCMI等外设的数据寄存器),存储器(片内SRAM、外部存储器、片内Flash等等)。外设到存储器,例如将AD转换的数据转移到所定义的存储区中。存储器到外设多用于外设的发送通信,例如串口...原创 2018-10-17 21:39:37 · 5281 阅读 · 0 评论 -
14-HAL库之I2C通信
1.I2C协议介绍I2C是一个支持多设备的总线,可连接多个I2C通讯设备,每个总线包括一条双向串行数据线(SDA)和一条串行时钟线(SCL)。数据线用来表示数据,时钟线用来数据收发同步。通讯过程如下:S:主机的I2C接口产生的传输开始信号,连接在I2C总线上的所有从机都会接收到。SLAVE_ADDRESS:主机广播的从机地址信号,I2C总线上每个从机地址唯一。R/W:读写方向,...原创 2018-10-18 19:40:20 · 21743 阅读 · 5 评论 -
12-HAL库串口通信总结
1.定义了三种传输方式:阻塞传输,中断传输、DMA传输HAL_UART_Transmit; HAL_UART_ReceiveHAL_UART_Transmit_IT; HAL_UART_Receive_ITHAL_UART_Transmit_DMA; HAL_UART_Receive_DMA此外还定义了两个中断回调函数,供中断和DMA使用,分别在数据传输一半和完成时使...原创 2018-10-09 18:31:18 · 6042 阅读 · 3 评论 -
15-HAL库之定时器学习
1.基本定时器(TIM6/TIM7)包含时钟源(CK_INT),1个16位自动重载递增计数器(CK_ARR),1个16位可编程预分频器(CK_PSC),计数器寄存器(CK_CNT),触发DAC的控制器组成。时钟源为APB外设时钟,定时事件生成事件主要由CK_PSC和CK_ARR两个寄存器值觉得。例如需要1s延时,时钟源周期为100us,设置CK_ARR为9999,CK_CNT从0开始到99...原创 2018-10-23 10:35:53 · 3268 阅读 · 0 评论 -
HAL库之485+DMA通信(STM32F746)
很让人无语,一个简单的485卡了很久。虽然简单,但通过调485通信可以总结很多调试经验:1.首先一定要保证硬件正确,包括接线,工具正常;2.其次基本配置一定要正确,例如此次配置485的时候,可以实现DMA发送,却不能实现接收。而同样的串口参数配置使用中断方式和232接口都能实现发送接收,个人判断是是接收DMA部分配置有问题,结果卡了很久才发现是基本的管脚配置有误。485的三根引脚要配置成推...原创 2018-11-05 19:24:15 · 5843 阅读 · 2 评论 -
16.HAL库之SPI和QSPI
1.SPI协议(以RN8302为例)SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线(SCSN,SCLK,SDI,SDO).总结传输流程:a.写时序SCSN拉低,开启通讯。主机依次写入地址,命令,数据(高位在前,低位在后),CS校验。主机在SCLK下降沿将数...原创 2018-11-08 17:20:36 · 17920 阅读 · 0 评论 -
HAL库学习之阶段性总结
很久没写博客了,一晃都三四个月了。HAL库基本上算是弄懂了,中间抽时间研究了下UCOSII操作系统和CADENCE画原理图。接下来的目标:1.HAL库其他的外设,CAN,PWM,网口2.CADENCE画PCB(或者AD)...原创 2018-12-27 11:32:03 · 548 阅读 · 0 评论 -
17.LWIP学习
很久没更新了,最近花了点时间研究了下LWIP,看着很复杂,实际也还好。LWIP学习推荐看野火的资料,如果加freertos操作系统的话直接利用cubemx生成即可,省心省力。先开个头,后面有时间再编辑详细介绍。1.简介LWIP是轻量化的 TCP/IP协议,包括无操作系统运行(RAW)和有操作系统运行。官方源码下载地址:http://download-mirror.savanna...原创 2019-05-13 18:17:56 · 957 阅读 · 0 评论 -
keil5如何将代码打包为lib文件
对于某些需要加密的.c代码,keil软件提供了打包为lib文件的方法,便于移植和调用。1.新建GROUP将所有需要打包的.c文件copy到该group中,需要确保这些.c文件的相对独立性,即包含.h文件即可调用。其他如中断类的.c文件无法打包。2.打包设置右键那些不需要打包的组,去掉 include in Target Build前的对勾。系统设置中,output一栏选择Cre...原创 2019-10-09 08:52:33 · 5004 阅读 · 5 评论 -
关于 Error[Pe020]: identifier "HAL_StatusTypeDef" is undefined
这个bug比较常见,右键可以定位到相关头文件,但系统依旧报错,其实主要还是头文件的问题。1.需要检查头文件中关于主程序所用到的部分是否已经使能,尤其是 “stm32f7xx_hal_con.h”和"stm32f7xx_hal.h"。2.编译器报错的地方并不准确,比如报头文件 stm32f7xx_rcc.h 中HAL_StatusTypeDef未定义,需要仔细查看报错是在编译那个.C文件的时...原创 2018-09-20 20:59:56 · 9555 阅读 · 2 评论 -
1.基于固件库建立STM32F4的工程模板
1.新建一个文件夹,命名为工程的名字(例如:STM32_Demo),在此文件夹下建立5个文件夹,分别命名为。如下图:CORE,FWLIB,OBJ,SYSTEM,USER 2.在ST官网下载最新标准固件库(STM32F4xx_DSP_StdPeriph_Lib_V1.8.0)并解压:https://www.st.com/en/embedded-software/stm32...原创 2018-09-08 10:06:03 · 4959 阅读 · 3 评论 -
2.STM32F4/7点灯
思路:1.时钟使能(开启GPIOA端口时钟使能) 2.GPIO配置(推挽输出模式,频率,速度等) 3.GPIO输出高电平(输出置位) STM32F4:推挽输出,输出低电平灯亮,输出高电平灯灭.#include <stm32f4xx.h> void Delay(__IO uint32_t nCount){ while(nCount--);}void GPI...原创 2018-09-08 11:23:14 · 707 阅读 · 0 评论 -
6.中断优先级分组NVIC
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) typedef struct NVIC_InitTypeDef{uint8_t NVIC_IRQChannel; //中断通道uint8_t NVIC_IRQCha...原创 2018-09-11 16:57:16 · 1077 阅读 · 0 评论 -
7.STM32F407ZG串口通信配置流程
步骤:1.时钟使能:GPIO时钟使能,串口时钟使能。 RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);2.端口配置:GPIO引脚配置,复用模式。 GPIO_InitTypeDef GPIO_S...原创 2018-09-11 19:46:59 · 1803 阅读 · 0 评论 -
3.STM32F4蜂鸣器
推挽输出,输出高蜂鸣器响,输出低电平蜂鸣器停. #include <stm32f4xx.h> void Delay(__IO uint32_t nCount){ while(nCount--);}void GPIO_Con(){ GPIO_InitTypeDef GPIO_Struct; RCC_AHB1PeriphClockCmd(RCC_AHB1Peri...原创 2018-09-09 16:38:04 · 1882 阅读 · 0 评论 -
8.STM32之EXIT外部中断
每个IO口都可以作为一个外部中断输入,但只有7条外部中断线。流程:1.时钟使能2.GPIO配置3.IO口和中断线的映射4.NVIC设置,使能5.中断服务函数的处理6.进入中断后即可清除中断标志位#include <exti_con.h>#include <stm32f4xx_exti.h>#include <key.h>#...原创 2018-09-12 18:55:18 · 1041 阅读 · 0 评论 -
4.STM32F407ZG按键输入
1.硬件图对应的按键分别为PA0,PE4,PE3,PE2。其中KEY_UP按下时,PA0为高电平,因此应设置下拉输入。K1~K3按下时,PE4~PE2为低电平,因此应设置上拉输入。2.按键扫描:首先,按键输入这一从高电平变为低电平的动作才能任为按键按下,并不只是检测到有按键输入就是按键按下。其次,这里需要考虑按键一直处于按下状态时的情况。最后,需要对按键按下进行防抖确认。3.针对按...原创 2018-09-10 21:34:00 · 3249 阅读 · 0 评论 -
9.STM32之两只看门狗
1.独立看门狗 IWDG由内部时钟LSI提供,故不需要时钟使能,为递减计数器。独立看门狗激活后,计数器递减到0时复位,因此需要在计数器减到0之前进行喂狗操作。步骤:取消写保护-设置时钟分频系数-设置重装载值-看门狗使能-喂狗程序相关函数:#include "stm32f4xx_iwdg.h"void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAc...原创 2018-09-13 19:50:46 · 167 阅读 · 0 评论 -
10-HAL库之ADC电压采集
1.简介12位ADC是逐次趋近型模数转换器,有19个复用通道(可测量16个外部源,2个内部源和1个VBAT通道的信号)。A/D转换可在单次、连续、扫描或不连续采样模式下进行,采样结果存储在1个16位数据寄存器中(实际只有12位数据)。规则通道:一般所使用的通道;注入通道:在规则通道转换时强行插入转换的通道,类似于中断。ADC支持外部事件触发,包括内部定时器和外部IO。ADC输...原创 2018-09-19 09:50:47 · 11981 阅读 · 1 评论 -
11-STM32F746之存储总结
1.基本概念存储器总的分为易失性存储器(掉电后存储内容丢失)和非易失性存储器两大类。前者存取速度快,而后者可以长期保存数据。易失性存储器:RAM,又分为动态随机存储器(DRAM)和静态随机存储器(SRAM)。当前个人计算机常用的内存条是DDRIII SDRAM。EEPROM:电可擦除存储器,用电路控制,可按字节为单位修改数据,现在主要使用的ROM芯片都是这一类。FLA...原创 2018-09-20 12:32:19 · 1318 阅读 · 0 评论 -
5.HAL库之时钟系统及定时器SYSTICK
1.系统时钟树:LSI:低速内部时钟(RC震荡器),32kHz,提供低功耗时钟,用于看门狗和自动唤醒单元。LSE:低速外部时钟,外接32.768kHz的石英晶体,可用于RTC。HSI:高速内部时钟16MHz,RC振荡器,精度不高,可用作系统时钟或PLL输入。HSE:高速外部时钟4~26MHz,外接石英/陶瓷谐振器或外部时钟源,可用作RTC或PLL或系统时钟。PLL:锁相环倍...原创 2018-09-11 12:58:42 · 6609 阅读 · 0 评论