stm32
小盼你最萌哒
这个作者很懒,什么都没留下…
展开
-
EC20模块收件箱已满解决方案
EC20模块本身可以存储180条短信,当收件箱满时,一般是不会有异步通知和错误提示的。此时如果有新消息到来,依然会触发断网,但是不会有任何新的提示。可以使用AT+CPMS?查看当前收件箱情况:此时收件箱已满。可以使用CMGD指令进行短信删除操作:删除一条短信:删除后还有170条短信在收件箱:删除所有短信:删除完成后收件箱为空:此时新短信就可以看到了:收件箱有一条:...原创 2021-01-18 15:51:45 · 458 阅读 · 1 评论 -
OneNET上传位置数据(经纬度)
参考官方说明文档设备终端接入协议-MQTT.docx:只要按照这样写数据就行了。那么第一步,手写json数据格式字符串(这里可以使用cJSON库,参考另外一篇博客){"datastreams":[{"id":"location","datapoints":[{"value":{"lon":112.408320,"lat":34.636055}}]}]}对应的16进制(ASCII格式)可以先看一看:D/HEX $dp: 0000-000F: 01 00 7F 7B 22 6C 6F 63 61原创 2020-07-13 22:26:16 · 4180 阅读 · 3 评论 -
nmealib GPS数据解析 设置不同的结束符
一般情况下,GPS模块发送的数据是以\r\n结束的,但是有时候经过我们的串口助手保存,可能就会被处理成了\n结束,修改文件里的每一行需要借助notepad++等工具,比较麻烦,这里直接修改代码,适配\n结束的nmea数据包。/** * \brief Find tail of packet ("\r\n") in buffer and check control sum (CRC). * @param buff a constant character pointer of packets buffer原创 2020-06-27 16:13:09 · 386 阅读 · 1 评论 -
STM32H743 解决串口同时收发遇到的问题
博主在使用1.2版本的HAL库开发STM32H743的串口7设备的时候,遇到了如下问题:数据发送使用HAL_UART_Transmit进行发送,单独测试发送的时候,发送正常。接收则是HAL_UART_Receive_IT,逐字节进行接收并存放至数组,配合定时器进行不定长数据接收,单独测试接收的时候,接收也正常。然后博主这里就把TX和RX短接,按理说在发送完成后的50ms以内就会打印接收到的数据(定时器设置的50ms溢出,即不定长数据间隔为50ms),但是这里并没有看到输出。研究了下源码,可以发现,发原创 2020-06-24 16:47:04 · 4547 阅读 · 2 评论 -
STM32硬件SPI时钟频率与时钟解析(基于逻辑分析仪的抓包试验)
首先粘贴出我们CubeMX生成的时钟配置:然后启用SPI3的功能,这里因为博主的逻辑分析仪比较low,所以把SPI的波特率设置成最大分频,即256分频,此时CubeMX工具计算出来的时钟频率为1.5625MBits/s:我们都知道,SPI3挂载在APB1总线上,受到总线的最大时钟120M的限制,由前面的时钟图可以知道,APB1总线时钟速度为100M,那么经过256分频应该是390.625KHz才对。1.5625M/390.625K=4,这里的4倍频,是CubeMX软件计算的问题,还是真的哪里有了4倍原创 2020-06-01 21:50:11 · 18634 阅读 · 1 评论 -
STM32H7系列SDMMC1中的IDMA 和 ARM Cortex-M的分散加载
先来一张中文参考手册中的系统架构图,可以看到,STM32H7系列包含两个SDMMC控制器:SDMMC1和SDMMC2。在芯片手册中的架构图能够更直观地看出来:SDMMC内部集成一个IDMA,H7系列有很多总线主设备,包括DMA1、DMA2、BDMA、MDMA、DMA2D,还包括IDMA和以太网DMA这种专用DMA。查看系统架构图和关于总线主设备的描述:SDMMC1和SDMMC2相比,...原创 2020-04-28 10:53:42 · 2313 阅读 · 0 评论 -
STM32H7实现ADC等周期采集(定时器触发+DMA传输)
定时器输出的PWM通道设置的是2s的周期,50%占空比,方便没有示波器的条件下观察结果。数据会2s采集一次,500ms打印一次。CubeMX工程下载:主函数代码u16 buffer[128];int main(void){ u16 adcx; //Cache_Enable(); //打开L1-Cache HAL_Init(); ...原创 2020-04-26 11:54:07 · 3360 阅读 · 0 评论 -
STM32H7实现8通道ADC采集(软件触发+DMA传输)
CubeMX工程下载#include "sys.h"#include "delay.h"#include "usart.h"#include "adc.h"#include "dma.h"u16 buffer[128];int main(void){ u16 adcx; //Cache_Enable(); //打开L1-Cache...原创 2020-04-26 11:23:35 · 4112 阅读 · 0 评论 -
STM32H实现8通道ADC采集(连续转换序列+轮询)
使用HAL_ADC_PollForConversion可以进行一次转换,但是会根据设置的EOC类型决定是完成单通道转换还是Rank序列转换。主函数逻辑代码如下:#include "sys.h"#include "delay.h"#include "usart.h"#include "adc.h"int main(void){ u16 adcx; //Cache_En...原创 2020-04-26 09:59:42 · 2091 阅读 · 0 评论 -
STM32H7模拟量引脚分布
之前用的F1系列,都是单端信号,所以分布管脚基本上都是相连的,比较好记忆。而H7系列,具有差分信号输入功能,所以会和F系列在管脚分布上不太一样。H7系列多了一种ANA类型:而LQFP类型封装的只有PC2_C和PC3_C,没有PC2和PC3。实际上也就是多了几个引脚给我们用:STM32H743 芯片ADC1~ADC3引脚对应关系表而根据我们选择的芯片型号:STM32H743VIT...原创 2020-04-26 09:26:24 · 3306 阅读 · 0 评论 -
STM32H实现ADC采集
实现参考STM32F7实现ADC采集(软件触发+轮询)注意,在CubeMX中,生成HAL_ADC_MspInit中并不包含__HAL_RCC_ADC_CONFIG(RCC_ADCCLKSOURCE_CLKP);//ADC外设时钟选择,而ADC的时钟源有三个选项:/** @defgroup RCCEx_ADC_Clock_Source RCCEx ADC Clock Source * @{...原创 2020-04-26 08:18:01 · 1870 阅读 · 0 评论 -
J-Link V6.30h Device Selection 无法识别到STM32H743VITx芯片
下载最新版本的jlink驱动:https://www.segger.com/downloads/jlink/JLink_Windows.exe然后在接下来的列表里选择STM32H743VI,就可以识别了:个人感觉好像之前的版本应该好像也可以,导致的原因应该是安装的pack的问题:H7系列的命名会到Tx,而F系列都不会:...原创 2020-04-24 16:05:27 · 5161 阅读 · 0 评论 -
STM32F7使用SPI发送完成和接收中断
虽然在平常的使用中,spi使用轮询等待发送完成或者接收完成就行了。但是在对时间有严格要求的设计中,假设我们需要发送完成后立马做xx事情,此时如果有低优先级的信号需要处理,我们的轮询方式就得不到及时的响应;或者说比如需要定时从spi设备中采集数据,定时器中断来了我们就要马上调用接收函数,接收完成马上进行其他计算,同样此时应该保证数据的优先级。此时就需要用到发送完成和接收中断了。前面我们已经实...原创 2020-04-23 21:54:41 · 16137 阅读 · 2 评论 -
STM32F7实现SPI读写,读取W25Q16型号
SPI协议的原理,网上大把的资料可以找到,这里记录一下SPI的初始化过程,以即以读取W25Q16型号为例的一个简单的SPI读写过程。CubeMX配置:SPI模式有只发送、只接收、半双工和全双工模式;根据自己的需求,和SPI设备支持的类型,这里选择全双工的SPI;片选信号因为我们这个SPI总线上会挂载多个从设备,而且只有一个主机,所以,这里禁用硬件片选,程序里面读写之前使用软件进行片选...原创 2020-04-23 12:11:29 · 5517 阅读 · 1 评论 -
SPI的NSS 脉冲模式的作用
在STM32F767的中文参考手册中增加了NSSP Mode 设置:以下是STM32F7系列的中文参考手册中关于NSSP Mode的描述:该模式通过 SPIx_CR2 寄存器中的 NSSP 位来激活,只有将 SPI 接口配置为 Motorola SPI 主模式 (FRF=0)且在第一个边沿捕捉时,该模式才起作用(SPIx_CR1 CPHA = 0,CPOL 设置忽略)。激活后,当 NSS...原创 2020-04-23 09:57:46 · 6575 阅读 · 0 评论 -
STM32F7实现ADC等周期采集(定时器触发+DMA传输)采集完成后的中断设置
虽然可以使用DMA对数据进行传输, 但是采集传输完成,其他外设或者主线程是需要知道是否采集完成,才能使用这个数据的。如果我们设置好了传输完成中断,就可以实现了。在STM32F7中文参考手册中,有关于EOC的介绍:EOC有以下取值:/** * @} */ /** @defgroup ADC_EOCSelection ADC EOC Selection * @{ */...原创 2020-04-21 21:47:05 · 4891 阅读 · 1 评论 -
STM32F7实现ADC等周期采集(定时器触发+DMA传输)
参考STM32F7实现ADC采集(软件触发+DMA传输)解决了采样结果不实时更新的问题和STM32F7普通定时器的使用(定时+中断+PWM),实现了定时器加DMA的等周期采集。adc.c:#include "adc.h"#include "delay.h"ADC_HandleTypeDef ADC1_Handler;//ADC句柄DMA_HandleTypeDef ADC1DMA_Ha...原创 2020-04-21 19:54:47 · 2689 阅读 · 3 评论 -
STM32F7普通定时器的使用(定时+中断+PWM)
此篇博客记录的是自己通过CubeMX学习F7系列定时器功能的过程,献给有过标准库开发经验的同学。基本计时功能最简单的,定时器嘛,基本的定时器就是定时功能,简单来说就是TIMx->CNT会跟随着输入时钟的脉冲而计数。初始化定时器的参数,大家都好理解,因为TIM2的输入时钟是108Mhz,这里进行10800分频,输入频率为10K,重装载值设置为20K,每2秒溢出一次。在HAL_TIM_B...原创 2020-04-21 16:34:14 · 3016 阅读 · 0 评论 -
CubeMX 5.5 修改HAL库库函数版本
最初我是按照软件推荐,自动按安装的1.15的。为了和正点原子的例程统一库函数版本,就下载了1.11。但是在工程配置界面始终没有办法修改hal库版本的选择:关闭CubeMX,使用记事本打开工程文件:修改版本号:重新打开工程,库版本修改成功:工程生成成功:...原创 2020-04-20 13:23:53 · 1387 阅读 · 6 评论 -
STM32F7实现ADC采集(软件触发+DMA传输)解决了采样结果不实时更新的问题
ADC1DMA_Handler.Init.ModeDMA的正常模式(DMA_NORMAL):采集到DMA_BufferSize 的个数后,DMA停止。DMA的循环模式(DMA_CIRCULAR):采集到DMA_BufferSize 的个数后,重新回到设置的RAM的起点位置,如此循环。虽然道理很好理解,但个人感觉要配合触发信号来用,通过HAL_ADC_Start_DMA软件触发需要设置起点位置...原创 2020-04-19 19:59:51 · 6143 阅读 · 2 评论 -
STM32F7实现ADC采集(软件触发+DMA传输)
前面完成了STM32F7实现ADC采集(软件触发+轮询),但轮询的时候CPU得不到释放,在此基础上,这里实现DMA的传输。由STM32F7的中文参考手册可以知道,ADC可以使用DMA2的数据流0:使用CubeMX配置DMA:adc.c内容如下:#include "adc.h"#include "delay.h"ADC_HandleTypeDef ADC1_Handler;//AD...原创 2020-04-19 14:34:44 · 4336 阅读 · 0 评论 -
STM32F7实现ADC采集(软件触发+轮询)
基于HAL库,实现最简单ADC采集。第一步,使用CubeMX配置时钟。然后是adc的配置:将,稍微修改一下风格,并手写头文件和源文件。adc.h很简单,就不说了。#ifndef __ADC_H#define __ADC_H#include "sys.h"void MY_ADC_Init(void); //ADC通道初始化u16 Get_Adc(void); ...原创 2020-04-19 13:16:44 · 3675 阅读 · 0 评论 -
Jlink OB仿真Cortex-M7的问题
使用淘宝便宜的jlink-ob给stm32f767进行烧录程序的时候,出现了如下提示:回到淘宝链接查看了下商品详情:确实人家不支持M7,博主想的是如果想支持M7,那一定要使用更高版本的Jlink固件才能支持。...原创 2020-04-18 11:11:45 · 1818 阅读 · 0 评论 -
RT-Thread Studio片上Flash 实现Flash抽象层FAL笔记
使用ATK-NANO STM32F411的开发板, 实现Flash抽象层FAL。先添加fal的软件包,并复制fal_cfg.h到drivers目录下:复制C:\RT-ThreadStudio\download\rt-thread-sdk\rt-thread-src\v4.0.2\bsp\stm32\libraries\HAL_Drivers\drv_flash目录下的drv_flash.h文...原创 2020-03-20 11:45:18 · 4299 阅读 · 0 评论 -
关于STM32中Bank、Sector、Page的理解
以我们常用的STM32F103C8T6为例:它具有64K的闪存大小,属于中容量产品。在STM32中文参考手册_V10中,是这样描述嵌入式闪存的:中容量产品主存储块最大为16x64位,每个存储块划分为128个1K字节的页,对应的表3如下:在手册随后的擦除和编程相关的描述中:我们就知道了,STM32F1系列最小擦除粒度为页面(1K),最小写入粒度为半字(2byte)。再以STM32...原创 2020-03-20 10:45:34 · 12783 阅读 · 1 评论 -
LwIP之TCP Server发送和接收Demo
在sal的基础上,tcp server的操作和pc端的流程基本一致,这里做一个小demo,server监听5000端口,向发起连接的client对象发送一个字符串,然后阻塞接收client发回的数据,再断开连接,等待下一个连接请求。/* * Copyright (c) 2006-2019, RT-Thread Development Team * * SPDX-License-Ident...原创 2020-02-21 10:22:55 · 4747 阅读 · 1 评论 -
LwIP之TCP Client发送和接收Demo
在sal的基础上,tcp client的操作和pc端的流程基本一致,代码和UDP相比多了个connect的步骤,sendto变成了send,recvfrom变成了recv,其他就没有什么区别了。/* * Copyright (c) 2006-2019, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 *...原创 2020-02-20 17:43:52 · 6536 阅读 · 0 评论 -
LwIP之UDP发送和接收Demo
使用RT-Thread Studio基于rt-thread4.0.2构建的工程:这里记录一下最基本的收发代码。/* * Copyright (c) 2006-2019, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Autho...原创 2020-02-20 17:20:12 · 3688 阅读 · 0 评论 -
HAL库使用修改为外部25M晶振
一个是修改SystemClock_Config函数中的参数和时钟来源,另一个是修改stm32f4xx_hal_conf.h中HSE_VALUE的值为25000000。下面是修改前后的git diffdiff --git a/drivers/board.c b/drivers/board.cindex 4fb1fee..bbc8096 100644--- a/drivers/board.c...原创 2020-02-17 10:15:33 · 2418 阅读 · 1 评论 -
LAN8720A移植笔记
自己做的f407VE+LAN8720A板子,使用[野火]《LwIP应用开发实战指南》系列中的例程修改,因为野火使用的是F407ZG的芯片,硬件接线图也不一样,所以还需要做一些修改。User/eth/bsp_eth.h中,需要根据自己的硬件连线修改引脚配置。/* Private defines --------------------------------------*/#define ET...原创 2020-02-16 09:58:15 · 2565 阅读 · 0 评论 -
stm32使用HX711读电子秤的值
使用HX711变送器模块+5kg的传感器。#define HX711_DATA PEin(0)#define HX711_SCK PEout(1)void HX711_init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, EN...原创 2019-11-08 14:30:14 · 9373 阅读 · 3 评论 -
stm32仿真设置
原创 2019-11-02 10:47:49 · 570 阅读 · 0 评论 -
Keil工程.gitignore文件
*.pyc*.map*.dblite*.elf*.bin*.hex*.axf*.exe*.pdb*.idb*.ilk*.oldbuildDebugdocumentation/htmlpackages/*~*.o*.obj*.out*.bak*.dep*.lib*.i*.d.DS_Stor*.config 3.config 4.config 5...原创 2019-10-28 20:06:55 · 2056 阅读 · 0 评论 -
stm32定时器既做定时功能又输出PWM并控制PWM启停
对于普通定时器如TIM2、TIM3、TIM4、TIM5,如下配置://TIM3 PWM部分初始化//PWM输出初始化//arr:自动重装值//psc:时钟预分频数void TIM3_PWM_Init(u16 arr, u16 psc){ GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_T...原创 2019-08-20 10:09:30 · 8637 阅读 · 4 评论 -
DS18B20 执行时间测试
配置10us溢出一次的定时器中断:TIM3_Int_Init(10-1,72-1);中断之后溢出值+1int timeFlow=0;void TIM3_IRQHandler(void){ if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)//是更新中断 { timeFlow++; TIM_...原创 2018-11-23 21:35:42 · 1116 阅读 · 2 评论 -
AD7908使用模拟SPI读取模拟量值
根据电路板的连线图和手册中的寄存器定义,可以先写一波SPI_AD7908相关的宏。#define AD7908_CS PAout(8) //AD7908片选信号,低电平有效#define AD7908_MISO PBin(14)#define AD7908_MOSI PBout(15)#define AD7908_CLK PBout(13)#define SPI_AD7908_WR...原创 2019-09-27 12:57:05 · 1372 阅读 · 2 评论 -
w5500网络连接
socket.h中包含各种函数的声明,因为w5500含有8个socket,每个通信都需要指定相应的socket。#ifndef _SOCKET_H_#define _SOCKET_H_#include "stm32f10x.h"#include "Types.h"/*Socket 端口选择,可按自己的习惯定义*/#define SOCK_TC原创 2019-01-19 19:46:52 · 5182 阅读 · 0 评论 -
595与138选列和行数据串行的使用
void showLED(void){ unsigned char column=0; //列 unsigned char row=0; //行 for(column=0; column<16; column++) { setColumn(column); //选列 for(row=8; row>0; row--)...原创 2019-01-08 20:35:44 · 477 阅读 · 0 评论 -
LAN8720A不能自动获取IP地址的问题
自己做的F407板子,使用了LAN8720A做以太网。但是在DHCP通不过,默认静态IP之后,在路由器的IP池里也找不到开发板,开始对照着原子的例程和探索者开发板debug……既然单片机和LAN8720A是有通信的,那就先看数据包吧。SMI:串行管理接口(Serial Management Interface),也被称作MII管理接口(MII Management Interface),包...原创 2018-12-21 21:54:28 · 5801 阅读 · 6 评论 -
AT24C02 能写不能读的问题!
自己制作的PCB上,IIC总线上挂载了MPU6050和AT24C02两个设备,使用正点原子探索者F4的IIC例程时,提示“24C02 Check Failed!”开始以为是买到了劣质芯片,便从可以使用的电路中拆了个芯片下来,发现也不行,而开始拆下来的放到其他板子上,发现芯片并没有问题,初步怀疑是IIC线路问题。因为上拉电阻开始焊接的是10K,觉得可能是因为驱动电流不够,换成了1K的,依然不行,...原创 2018-12-01 18:45:03 · 3431 阅读 · 1 评论