MDK

用CubeMX开发HAL学习记录(一)

痴心易碎 提交于 2021-02-14 15:31:43
用CubeMX开发HAL学习记录(一) 前言 一、CubeMX基本特点 1、集成MCU Finder功能,便于用户进行芯片选型 2、图形化方式配置时钟、片内外设,自动生成初始化代码 3、具有强大的适应性 4、提高开发效率 二、CubeMX下载 1.CubeMX软件下载 2.安装环境 3.注意事项 4.固件包导入 三、CubeMX生成文件介绍 1.MCU固件包 2.界面介绍 3.常规配置 总结 前言 笔者还是一名大二学生,目前正在学习CubeMX的开发,自己想通过写博客来加深自己的学习印象,如有不妥请指正。 一、CubeMX基本特点 1、集成MCU Finder功能,便于用户进行芯片选型 STM的芯片种类众多引脚封装也不尽相同,用户可以更具自己需要的内核,引脚封装类型和开发型号选择自己所需要的那一款MCU。 2、图形化方式配置时钟、片内外设,自动生成初始化代码 STM的时钟树都十分庞大且复杂,不同的外设对应着不同的时钟源,因此对照技术手册一面面的寻找总线,和时钟倍频设置是十分复杂的,而CubeMX可以直接越过这些基础操作,只对逻辑层进行编辑,极大的节省了时间成本。但不需要配置寄存器或库函数不代表你不需要去了解时钟树,学习STM的人必须先经过时钟树的洗礼(本文建议结合CubeMX的时钟树和B站正点原子的时钟树对比学习) B站原子哥时钟树:https://www.bilibili.com

数据库DNSLog外带注入-总结

*爱你&永不变心* 提交于 2021-02-13 18:33:47
sql注入中利用的骚姿势你又知道几个? DNSLog外带注入和DNSlog带外注入?(OOB) 其实是一样的,叫法不同!本人还是习惯叫外带注入,自我感觉,比较顺口 为什么需要外带注入? 当我们对一个数据库进行注入时,无回显,且无法进行时间注入,那么就可以利用一个通道,把查询到数据通过通道带出去,这里的通道包括: http请求、DNS解析、SMB服务等将数据带出。 of course!这里主讲DNSlog外带注入 mysql-DNSlog外带注入: 利用条件: 1. mysql.ini 中 secure_file_priv 必须为空。 ( ps. 修改mysql.ini 文件,在[mysqld] 下加入 secure_file_priv = ) mysql 新版本下secure-file-priv字段 :secure-file-priv参数是用来限制LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE()传到哪个指定目录的。 当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制 2.

STM32 IAP固件升级(一)

 ̄綄美尐妖づ 提交于 2021-02-13 07:22:35
#章节说明 STM32 IAP固件升级实验分为一下的章节(加粗的字体是本章节的内容): 一、Flash和RAM的区域划分、工程建立、程序分散加载、程序烧写 二、Stm32 bootloader、application、firmware 程序的分析和编写 三、使用DMA收发串口的不定长数据 四、通信协议的设计 五、STM32 IAP程序的设计 六、上位机的程序的编写 #一、Flash区域的划分 1.区域划分 实验使用的是 STM32F103VET6型号的MCU。这个单片机的型号的内部flash的大小是512Kb, RAM的大小是64Kb。 因为一般使用的都是flash的启动方式(即flash 的起始地址 0x0800 0000 被映射到 0x0000 0000 。STM32的启动方式可以查看《STM32中文参考手册》) 所以flash的区域划分如下: 2. flash 分区说明 0x0800 0000 到 0x0800 b7FF 地址的flash块划分给bootloader,大小是46kb 0x0800 B800 到 0x0800 BFFF 的flash块划分为参数表(parameters),大小是2Kb 0x0800 C000 到 0x0804 3FFF 的flash块划分为应用程序区 (application),大小是224Kb 0x0804 4000 到 0x0807 BFFF

【LiteOS】STM32F103-LiteOS移植教程(详细篇)

£可爱£侵袭症+ 提交于 2021-02-12 03:43:21
总览 本文基于STM32F103C8T6,详细讲述华为LiteOS的移植过程。开发工具是MDK5。LiteOS官方已经适配过cortex M系列内核的单片机,因此移植过程非常简单。 LiteOS有两种移植方案:OS接管中断和非接管中断方式。接管中断的方式,是由LiteOS创建很管理中断,需要修改stm32启动文件,移植比较复杂。STM32的中断管理做的很好,用不着由LiteOS管理中断,所以我们下边的移植方案,都是非接管中断的方式的。中断的使用,跟在裸机工程时是一样的。 在target_config.h 中将 LOSCFG_PLATFORM_HWI 宏定义为 NO,即为不接管中断方式。该值默认为NO 。 移植的主要步骤如下: 1、添加内核文件 2、配置头文件 3、移除systick和pendsv中断 4、修改target_config.h 5、重定向printf函数(一般在裸机工程中就会实现) 说明:内核运行过程中会通过串口打印一些错误信息。如果日志功能开启、而又没有重定向printf函数的话,则会导致日志打印出错,程序异常卡死。之前我就是没有重定向printf函数,结果出了莫名其妙的问题,程序异常卡死在创建任务的地方。 下边我们通过新建一个裸机工程,一步步讲解如何进行移植。以下是详细过程。 一、创建裸机工程 我们这次使用的是一个STM32F103C8T6的最小系统板

RT-Thread 设备驱动-硬件定时器浅析与使用

杀马特。学长 韩版系。学妹 提交于 2021-02-11 15:57:43
RT-Thread 4.0.0 访问硬件定时器设备 应用程序通过 RT-Thread 提供的 I/O 设备管理接口来访问硬件定时器设备,相关接口如下所示: 函数 描述 rt_device_find() 查找定时器设备 rt_device_open() 以读写方式打开定时器设备 rt_device_set_rx_indicate() 设置超时回调函数 rt_device_control() 控制定时器设备,可以设置定时模式(单次/周期)/计数频率,或者停止定时器 rt_device_write() 设置定时器超时值,定时器随即启动 rt_device_read() 获取定时器当前值 rt_device_close() 关闭定时器设备 RT-Thread 提供的 I/O 设备硬件定时器,示例仅提供最通用简单的定时功能,其他定时器高级功能需自行在control中添加; 下面对基于CubeMX、Hal库的BSP的硬件定时器的使用做简单描述。 配置CubeMX 配置之后生成代码, 在 stm32f4xx_hal_conf.h 中 会实现 hal模块驱动 #define HAL_TIM_MODULE_ENABLED 修改工程目录下的 Kconfig 在 Kconfig 中添加对 TIM的支持 menuconfig BSP_USING_TIM bool " Enable Hardware TIM

FreeRTOS 移植

不问归期 提交于 2021-02-10 08:01:23
首先准备好一个简单的裸机工程模板,工程模板的制作就不做讲解了,这里的重点是教大家移植FreeRTOS系统。: 准备好工程模板后,就可以开始移植了。首先要做的就是将所有需要的源码文件放到工程模板里面 。下面分六步和大家进行说明,当然,不限制必须使用下面的方法添加源码到工程,只要将需要的文件添加到工程模板即可。 第1步 :从网址 https://sourceforge.net/projects/freertos/files/FreeRTOS/V8.2.3/ 下载V8.2.3版本,这个是8.X系列里面最高版本了,9.0版本还处于测试阶段,我们暂不使用。 FreeRTOSV8.2.3.zip 和FreeRTOSV8.2.3.exe内容是一样的,只是后缀为exe的压缩率更高些。下载后解压出来。 第2步 :在工程模板创建FreeRTOS文件夹 第3步 :添加源码文件到相应文件夹 (1) 将FreeRTOSV8.2.3软件包中路径:    FreeRTOSV8.2.3\FreeRTOS\Source里面如下所有文件 复制到刚刚创建的FreeRTOS文件夹下。 (2) 文件夹User中还需要添加如下文件: 文件FreeRTOSConfig.h文件 在FreeRTOSV8.2.3软件包中的中的路径: FreeRTOSV8.2.3\FreeRTOS\Demo\CORTEX_M4F

STM32(2)——GPIO

て烟熏妆下的殇ゞ 提交于 2021-02-09 03:36:05
对于初学者而言,最简单的是对芯片上的IO进行操作,我们学习ARM时候,第一个工程就是点亮LED,STM32F103ZET6通用输入输出接口 (General-Purpose Inputs/Outputs),每个GPIO都可以由软件配置成输出(推免或开漏)、输入(带或不带上拉或下拉)或复用的外设功能端口。多数 GPIO引脚都与数字或模拟的复用外设共用。具体的细节请参考 Datasheet。 回到 MDK开发平台,现在要在 main.c中加入相关代码了。代码清单如下: #include "stm32f10x_lib.h" int main() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB, ENABLE); //开启外设时钟 GPIOD->CRL = 0x33333333; //设置端口配置寄存器 GPIOB->CRL = 0x33333333; while(1) { GPIOD->ODR = 0xffffffbf; //设置端口输出寄存器 for(i=0;i<1000000;i++); //延时 GPIOD->ODR = 0xffffffff7; for(i=0;i<1000000;i++); GPIOD->ODR = 0x00000000; GPIOB->ODR = 0xffffffff;

【安富莱】【RL-TCPnet网络教程】第10章 RL-TCPnet网络协议栈移植(FreeRTOS)

心不动则不痛 提交于 2021-02-08 04:09:03
第10章 RL-TCPnet网络协议栈移植(FreeRTOS) 本章教程为大家讲解RL-TCPnet网络协议栈的FreeRTOS操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要是添加库文件、配置文件和驱动文件即可。另外,RL-TCPnet移植到FreeRTOS要重新配置RL-TCPnet的接口函数,以此来支持RL-TCPnet多任务运行。使用RTX无需重新配置,因为默认情况下就是采用RTX的API函数配置的。 本章教程含STM32F407开发板和STM32F429开发板的移植。 10.1 移植前准备工作说明 10.2 STM32F407移植RL-TCPnet协议栈 10.3 STM32F429移植RL-TCPnet协议栈 10.4 总结 10.1 移植前准备工作说明 1、学习本章节前,务必要优先学习第6章的底层驱动讲解。 2、RL-TCPnet只有库,没有源码。库分为两个版本,一个用于调试的版本TCPD_CM3.lib和一个正式版本TCP_CM3.lib,当前的例子统一使用调试版本。另外注意,虽然是CM3版本的,但可同时用于CM3和CM4内核的MCU,因为官方没有专门的CM4内核库。 3、 测试时,请将网线接到路由器或者交换机上面测试,因为已经使能了DHCP,可以自动获取IP地址。 而且使能了NetBIOS局域网域名,用户只需在电脑端ping

STM32开发入门(一)——流水灯

天大地大妈咪最大 提交于 2021-02-03 11:03:28
stm32性能强大,但其开发难度又显著高于Arduino等单片机。本文将通过流水灯程序,介绍stm32开发的一些基本操作。 基本介绍 常见stm的编程方式有三种:寄存器式、标准库式、HAL库式。其中HAL库上手较为简单。本文将以HAL库式为基础介绍。 软件 Keil 5(单片机集成开发环境) STM32CubeMX(自动配置stm32编程的相关文件) FLYMCU(stm32串口下载软件,也可用ST-LINK代替) XCOM(串口监视器) 准备 打开图中的“File”,新建一个stm32项目(“New Project")。 在输入框中搜索自己的stm32芯片,双击创建新项目。 选择左边菜单栏中“System Core”的SYS、GPIO和RCC。 在SYS中选择Debug方式为“Serial Wire”。 在RCC中选择“Crystal/Ceramic Resonator” 点击右边芯片的引脚,可以看到每一个引脚的用法。此处我们选择引脚的“GPIO_Output”(通用型输出)模式。 依次选择每个引脚的模式,在该实验中,我们共需要10个模式为“GPIO_Output”的引脚。设置好后引脚会有绿色标记。 打开“GPIO”,设置引脚的输出模式为“Output Push Pull”(推挽输出模式)。 打开“Project Manager”,编辑文件名称,保存路径。注意设置IDE为MDK

软件测试的艺术(读书笔记6)

心不动则不痛 提交于 2021-01-31 09:57:58
下面开始本书第四部分的读书笔记部分 第四部分 开发中的调试和测试思想   第8章 调试;第9章 极限测试思想 第8章 调试   调试是执行一次成功的测试(发现软件中的错误)之后所要进行的工作。也就是说如果程序测试中发现了问题,就需要程序员对程序进行调试来解决问题。调试包括两个部分:定位问题和修改错误。测试到调试的关系图如下所示        因为对错误进行定位可能就已经解决大部分的问题,所以本章着重讨论定位错误的几种方法;然后,通过本章总结的一些调试原则,告诉读者最有效的调试方法,是在调试时进行“思考!”,只有这样才能高效的调试和解决问题;最后,作者告诉读者,光会调试还是不够的,还需要对错误进行分析,进而获取改进设计和测试过程的有价值信息。   1、暴力法调试     此方法很流行,我调试程序也经常用这类方法,因为它不需要过多思考,不费脑子,但是效率低下。只有在其他方法都失败或者作为替代方法进行调试。     1)利用内存信息输出来调试       如果做嵌入式设备,因为地址中内容是16进制数据,可能会查看Flash地址中的内容,来调试程序。但这种方法极其低效。     2)在程序中插入打印语句来调试       如果是嵌入式设备,可能还会添加亮灯、蜂鸣或串口打印等方式;       如果是小型应用程序,可以将每次产生的数据通过日志形式输出,根据日志内容来确定问题