自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 关于KEIL5编译出现“Target not createt”全系列解决办法——情况2:程序溢出错误 ERROR: PUBLIC REFERS TO IGNORED SEGMEN

在KEIL5编程,往往遇到许多“Target not createt”,即目标不能实现这类情况。由此为帮助大家解决这些问题特开此贴。目录如下:1、2K字节限制错误 ERROR:RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT 或者 ADDRESS SPACE OVERFLOW 2、程序溢出错误 ERROR: PUBLIC REFERS TO IGNORED SEGMEN............

2022-06-18 15:05:15 61154 6

原创 关于KEIL5编译出现“Target not createt”全系列解决办法——情况1:字节限制 RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT

在KEIL5编程,往往遇到许多“Target not createt”,即目标不能实现这类情况。由此为帮助大家解决这些问题特开此贴。情况如下:1、2K字节限制错误 ERROR:RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT 或者 ADDRESS SPACE OVERFLOW 2、程序溢出错误 ERROR: PUBLIC REFERS TO IGNORED SEGMEN........................

2022-06-18 11:49:34 23136 17

原创 QT基础——软件使用

一、Qt简单介绍:1、QT的简单理解:Qt简单的说就是一种可以跨平台的编程语言工具,可以直接类比C语言和C++.且一般QT的代码逻辑也是以C语言和C++(也可以适用于像JS的语言),可以直观理解于VScode、vs2019.不过它主要处理是以应用程序开发为主。(拿来直接当C编译器也是不错的)。2、QT支持的范围广:QT能够适用于面前市场上的大部分平台,如:iOS、Android、WP,iOS、Android、它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。基本上,Qt 同 X Windo

2021-10-23 21:04:27 1285

原创 FLASH模拟EEPROM实验

1, 锁定解锁函数上面讲解到在对FLASH进行写操作前必须先解锁,解锁操作也就是必须在FLASH_KEYR寄存器写入特定的序列(KEY1和KEY2),固件库函数实现:COPY同样的道理,在对FLASH写操作完成之后,我们要锁定FLASHCOPY2,写操作函数固件库提供了三个FLASH写函数:COPY顾名思义分别为:FLASH_ProgramWord为 32位字写入函数,其他分别为16位半字写入和用户选择字节写入函数。这里需要说明,32位字节写入实际上是写入的两次16位数据,写完第一次后地址

2021-10-06 16:48:43 861

原创 FLASH闪存编程原理与步骤

STM32 FLASH操作介绍:STM32编程方式:1,在线编程(ICP,In-Circuit Programming):通过JTAG/SWD协议或者系统加载程序(Bootloader)下载用户应用程序到微控制器中。2, 在程序中编程(IAP,In Application Programming):通过任何一种通信接口(如IO端口,USB,CAN,UART,I2C,SPI等)下载程序或者应用数据到存储器中。也就是说,STM32允许用户在应用程序中重新烧写闪存存储器中的内容。然而,IAP需

2021-10-06 16:39:57 3194

原创 IIC通信原理

概述:I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。IIC是半双工通信方式。多主机I2C总线系统结构I2C协议:空闲状态 开始信号 停止信号 应答信号 数据的有效性 数据传输 状态: 1)空闲状态 I2C总线总线的SD

2021-09-26 18:50:14 426

原创 SPI接口原理与配置与其实验操作

SPI接口原理:SPI接口简介:SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI内部结构简明图:(移位寄存器:将最高位 /

2021-09-26 18:47:25 3742

原创 DMA基本原理+实验

DMA简介:DMA 全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。作用:为CPU减负。STM32最多有2个DMA控制器(DMA2仅存在大容量产品中),DMA1有7个通道。DMA2有5个通道。每个

2021-09-19 21:30:58 1997

原创 ADC模数转换+实验

ADC概述:Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。STM32F10x ADC特点:12位逐次逼近型的模拟数字转换器。 最多带3个ADC控制器 最多支持18个通道,可最多测量16个外部和2个内部信号源。 支持单次和连续转换模式 转换结束,注入转换结束,和发生模拟看门狗事件时产生中断。 通道0到通道n的自动扫描模

2021-09-19 21:29:24 917

原创 定时器PWM输出实验

TIMx比CCRx小时(如0-t1)输出低电平,比CCRx大时(如t1-t2)输出高电平。通道一为例:CCR1:捕获比较(值)寄存器(x=1,2,3,4):设置比较值。CCMR1: OC1M[2:0]位:对于PWM方式下,用于设置PWM模式1【110】或者PWM模式2【111】CCER:CC1P位:输入/捕获1输出极性。0:高电平有效,1:低电平有效。CCER:CC1E位:输入/捕获1输出使能。0:关闭,1:打开。PWM模式1 & PWM模式2:寄存器TIMx_CCMR1的OC1M[2:0]位来分

2021-09-11 14:15:26 1851 2

原创 定时器中断实验

一、概述:通用定时器运行图:通用定时器运行图:时钟选择:计数器时钟可以由下列时钟源提供:内部时钟(CK_INT)外部时钟模式1:外部输入脚(TIx)外部时钟模式2:外部触发输入(ETR)内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。内部时钟选择:时钟计算方法:除非APB1的分频系数是1,否则通用定时器TIM2-7的时钟等于APB1时钟的2倍。默认调用SystemIn

2021-09-11 14:14:20 1191

原创 通用定时器基本原理讲解

概述:STM32定时器:STM32F10x系列总共最多有8个定时器。三种STM32定时器区别:通用定时器功能特点描述:STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能特点包括:位于低速的APB1总线上(APB1) 16 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数 为 1~65535 之间的任意数值。 4 个独立通

2021-09-11 14:12:42 1103

原创 窗口看门狗实狗实验——WWDG

概述:什么是窗口看门狗?之所以称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。喂狗的时间不能过晚。为什么要窗口看门狗? 对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了; 如果使用窗口看门

2021-09-11 14:09:10 391

原创 独立看门狗实狗实验—IWDG

在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。...

2021-09-05 16:07:18 520

转载 EXIT外部中断实验——EXTI

外部中断概述:STM32的每个IO都可以作为外部中断输入。 STM32的中断控制器支持19个外部中断/事件请求: 线0~15:对应外部IO口的输入中断。 线16:连接到PVD输出。 线17:连接到RTC闹钟事件。 线18:连接到USB唤醒事件。I/O口映像图:每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。STM32供IO使用的中断线只有16个,但是STM32F10x系列的IO口多达上百个,其中映射关系为:GPIOx.0映射到EX

2021-09-05 16:05:04 2337

原创 串口通信实验

串口操作相关库函数(省略入口参数):void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能void USART_Cmd();//使能串口void USART_ITConfig();//使能相关中断void USART_SendData();//发送数据到串口,DRuint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据FlagStatus USART_GetFlagStatus();//获取状态标志位

2021-09-05 16:03:18 2218

原创 常用的串口相关寄存器介绍

常用的串口相关寄存器: USART_SR状态寄存器: FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);COPY USART_DR数据寄存器: void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);uint16_t USART_ReceiveData(USART_TypeDef* USARTx);COPY

2021-08-27 23:37:57 4672

转载 串行通信原理

一、通信接口背景知识1,处理器与外部设备通信的两种方式:A.并行通信传输原理:数据各个位同时传输。(用多个口同时传输多位数据) 优点:速度快 缺点:占用引脚资源多B.串行通信传输原理:数据按位顺序传输。 优点:占用引脚资源少 缺点:速度相对较慢2,串行通信:按照数据传送方向,分为:(1),单工(a):数据传输只支持数据在一个方向上传输(2),半双工(b):允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;(3)

2021-08-14 00:02:11 1318

转载 NVIC中断优先级

一、STM32 NVIC 中断优先级管理1,中断:CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256 级的可编程中断设置。 STM32 并没有使用 CM3 内核的全部东西,而是只用了它的一部分。 STM32 有 84 个中断,包括 16 个内核中断和 68 个可屏蔽中断,具有 16 级可编程的中断优先级。 在 STM32F103 系列 上面,又只有 60 个(在 107 系列才有 68 个)可屏蔽中断。如下: 2,中断管理方法:首

2021-08-14 00:00:12 1420

转载 端口复用和重映射

什么是端口复用?STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。例如:串口1的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作GPIO,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。复用功能的配置:以下端口复用配置过程以PA9,PA10配置为串口1为例GPIO端口时钟使能。RCC_APB2PeriphClockCmd(RCC_APB2

2021-08-07 00:13:50 560

转载 Systick滴答定时器讲解

Systick定时器基础知识讲解:Systick定时器,是一个简单的定时器,对于CM3,CM4内核芯片,都有- Systick定时器。 Systick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。比如UCOS中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统中,都采用Systick做UCOS心跳时钟。 Systick定时器就是系统滴答定时器,一个24位的倒计数(从大到小)定时器,计到0时,将从RELOAD寄存器中自动重装载定时初值。只要不把它

2021-08-07 00:12:47 1028 1

转载 Systemlnit时钟系统初始化函数剖析

SystemInit():在工程文件的system_stm32f10x.c中有如下代码:这里将为大家逐个注释,让大家了解。void SystemInit (void){ RCC->CR |= (uint32_t)0x00000001;//把HSI时钟打开 //HSION:内部高速时钟使能 (Internal high-speed clock enable) 由软件置’1’或清零。 //当从待机和停止模式返回或用作系统时钟的外部4-16MHz振荡器发生故障时,该位由硬件

2021-08-01 01:34:49 339

转载 stm32时钟系统

STM32F10xx时钟系统框图:STM32有5个时钟源:HSI、 HSE、 LSI、 LSE、PLL(蓝框):1、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。2、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHZ ~ 16MHZ。3、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。WDG4、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC5、 PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2(二

2021-08-01 01:33:31 314

转载 c语言复习+MDK中寄存器地址名称映射

C语言复习:一、位操作:6种操作运算符二、define宏定义关键词define是C语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供方便。常见的格式:define标识符字符串“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。例如:#define SYSCLK FREQ 72MHz 72000000//定义标识符SYSCLK FREQ72MHz的值为72000000COPY三、ifdef条件编译单片机程序开发过程中,经常会遇到一种情

2021-08-01 01:32:06 274

转载 stn32按键输入实验——GPIO作输入

硬件连接图:根据自己的板子合理设计连接图或寻找盘内资料,此文章运用此连接图。GPIO输操作说明:读取IO口输入电平函数:uit8_ GPIO_REAdlnputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) 读取IO口输入电平操作寄存器:GPIOx_IDR(端口输入寄存器 使用位带操作读取IO口输入电平:PEin(3)和PEin(4)实验步骤:使能IO口时钟。调用RCC_APB2PeriphColckCmd(); 初始化IO口模式:上

2021-07-24 22:57:04 451

转载 stm32蜂鸣器实验

硬件连接:提示:不能通过IO口直接驱动大功率器件实验步骤:使能IO口时钟。调用RCC_APB2PeriphColckCmd(); 初始化IO口模式。调用函数BEEP_Init(); 操作IO口,输出高低电平。代码:beep.h:#ifndef __BEEP_H#define __BEEP_H #include "sys.h"//蜂鸣器端口定义#define BEEP PBout(8) // BEEP映射到PB8,蜂鸣器接口 void BEE

2021-07-24 22:54:50 1375 2

转载 stm32跑马灯——寄存器和位操作

寄存器版:GPIO基础:每组io口有7个寄存器。也就是7个寄存器,一共可以控制一组GPIO的16个IO口。硬件连接:例如:由上图1可知:要使用到LED0和LED1,他们的IO口分别为PB5和PE5由上图2可知:要使用到LED0和LED1,他们的IO口分别为PA8和PD2GPIO的输出模式为推挽输出。代码:使能IO口时钟:配置寄存器RCC APB2ENR. 初始化IO口模式:配置寄存器GPIOx CRH/CRL 操作IO口,输出高低电平:配置寄存器GPIOX_OD.

2021-07-24 22:48:01 951

原创 stm32—文件封装

一,环境:开发环境:MKD5固件库版本:V3.5(可自行在官网下载)二,步骤:1,在建立工程之前,我们建议用户在电脑的某个目录下面建立一个文件夹,后面所建立的工 程都可以放在这个文件夹下面,这里我们建立一个文件夹为 Template。2,点击 MDK 的菜单:Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹 Template 之下,在这个目录下面建立子文件夹 USER(我们的代码工程文件都是放在 USER 目录,很多人喜欢新建“Proj.

2021-07-17 12:59:09 1775

原创 stm32——跑马灯实验(用库函数实现)

库函数介绍1,初始化函数:void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);作用:初始化一个或者多个IO口(同一组)的工作方式和速度。该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的有时候有设置BSRR或者BRR寄存器例如:GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitTypeDef.GPIO_Pin = GPIO_Pin_5;//LE

2021-07-17 12:53:24 1836

原创 Arduino基础(四)——中断

1,语言基础:https://blog.csdn.net/SumubeiFZ/article/details/1186039572,串口通讯:https://blog.csdn.net/SumubeiFZ/article/details/1186382283,基础实验操作:https://blog.csdn.net/SumubeiFZ/article/details/1186382904,中断:https://blog.csdn.net/SumubeiFZ/article/details/118638

2021-07-10 17:44:56 7315 1

转载 Arduino基础(三)——基础实验

目录:1,语言基础:http://blog.qmgua.com/?id=1202,串口通讯:http://blog.qmgua.com/?id=1213,基础实验操作:http://blog.qmgua.com/?id=1224,中断:http://blog.qmgua.com/?id=127一、串口通讯实验:代码如下:int incomedate = 0; //定义变量void setup() { Serial.begin(9600); //设置串口波特率9600

2021-07-10 17:43:22 1632

原创 Arduino基础(二)——串口通讯

目录:1,语言基础:http://blog.qmgua.com/?id=1202,串口通讯:http://blog.qmgua.com/?id=1213,基础实验操作:http://blog.qmgua.com/?id=1224,中断:http://blog.qmgua.com/?id=127一、 硬件串口Arduino需要和其他设备相互通讯,而最常见最简单的方式就是串口通讯。在PC机上最常见的串行通讯协议是RS-232串行协议,而各种微控制器(单片机)上采用的是TTL串行协.

2021-07-10 17:41:13 3561 1

原创 Arduino基础(一)——语言基础

概况:Arduino语言,是指Arduino核心库文件提供的各种应用程序编程接口(Application Programming Interface,简称API)的集合。Arduino使用C/C++编写程序,虽然C++兼容C语言,但这是两种语言,C语言是一种面向过程的编程语言,C++是一种面向对象的编程语言。目前最新的Arduino核心库采用C与C++混合编写而成。基本结构:Arduino程序基本结构由setup() 和loop() 两个函数组成:(1)void se....

2021-07-09 13:03:09 14580

原创 MQTT协议的智能灯控

一、MQTT协议概述:MQTT,一种基于发布/订阅(piblish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上。它可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。该协议中有三种身份:发布者(Pbulish)、代理 / 服务器(Broker)、订阅者(Subscribe)。其中消息的发布者和订阅者都是客户端角色,消息代理是服务器,消息发布者可以同时是订阅者

2021-06-26 13:24:17 2585 1

原创 数组指针与函数

值传递和地址传递:值传递:形参不影响实参的值地址传递:形参改变实参如:void swap(int* a;int* b){ //a=&a b=&b int temp=*a; *a=*b; *b=temp; //对换ab对应地址的值}int main(){ a=10, b=20; swap(&a,&b); //传递a和b的地址 printf("%d\n",a);

2021-06-12 10:07:03 161

原创 数组与指针以及多级指针

### **指针操作数组**:```cint arr[]={1,2,3,4,5,6,7};//数组名是一个常量 不允许赋值`//数组名是数组首元素地址//arr=100; errint* p;p=arr;printf("%p\n",p);printf("%p\n",arr);//输出的地址相同```![](http://blog.qmgua.com/zb_users/upload/2021/06/202106021503101759820.png)```cfor(in.

2021-06-04 09:07:36 132

原创 函数与指针

一、函数函数是C程序的基础模块,是用于完成特定任务的程序代码单元。1,分类:(1)系统函数:即库函数,由辨析题提供的,用户不必自己定义这些函数,可以直接使用它们。如printf()(2)用户定义函数:用以解决用户的专门需要。2,作用:函数的使用可以省去重复代码的编写,降低代码的重复率。3,调用(5要素):头文件:包含指定的头文件函数名字:函数名字必须和头文件声明的名字一样功能:需要知道此函数的作用参数:参数类型匹配返回值:更具需要接受返回值例...

2021-05-22 13:59:34 133

原创 P3

格式化输入输出'a' 字符常量 “a”字符串常量(即是 ‘a\0’)定义字符串:char *b="hello world"占位符%s 打印字符串 遇到 \0停止%-xd (x为常数字) 输出:左对齐 一共x位%xd 右对齐 输入:则表示接收x位getchar输入:{char ch;ch = getchar;//输入量使变量等于该量}putchar输出:{char ch='c';putchar(ch);// 输出变量ch所定义的字符...

2021-05-15 16:36:05 93

原创 C语言结构基础

第一周学习的内容大多都是理论知识,收获不少,因为相对于其他教学都是直接教应用和代码程序。因此收获不少,在此总结自己学到的知识:P1:一,c语言结构:include <stdio.h>include 是导入一个文件stdio.h 是一个标准库 i(input),o(output)是标准输入输出库 .h是头文件< >表示导入系统文件 " "表示导入自定义文件int main (){ }int 是数据类型 整型 main程序的主函数 程序有且只有一

2021-04-24 13:11:15 203

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除