自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 I2C协议原理讲解

一、物理层:1.I2C通讯设备之间的常用连接方式:2.特点:(1) 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中, 可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机。(2) 一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA) , 一条串行时钟线 (SCL)。数据线即用来表示数据,时钟线用于数据收发同步。(3) 每个连接到总线的设备都有一个独立的地址, 主机可以利用这个地址进行不同设备之间的访问。(4) 总线通过上拉电阻接到电源。当I2C设备

2021-10-02 21:21:34 2084

原创 STM32——USART接发通信实验代码解析(适合野火stm32f103ZE)

一、实验1编程思路利用串口调试助手,打印输出和接收数据串口接收和发送(串口助手里面发送的是字符,设置多少进制显示是才会是数字)整体思路:1、使能RX和TX引脚GPIO时钟和USART时钟;2、初始化GPIO,并将GPIO复用到USART上;3、配置USART参数;4、配置中断控制器并使能USART接收中断;5、使能USART;6、在USART接收中断服务函数实现数据接收和发送。bap_usart.c结构体定义在函数的开头1、打开串口GPIO时钟2、打开串口外设时钟3、将USAR

2021-09-20 03:13:55 2221

原创 USART——串口通信(概念讲解)

一、串口通讯协议简介串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式, 电子工程师在调试设备时也经常使用该通讯方式输出调试信息。在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和片上外设;STM32标准库则是在寄存器与用户代码之间的软件层。 对于通讯协议,我们也以分层的方式来理解,最基本的是把它分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性, 确保原始数据在物理媒体的传

2021-09-20 02:28:08 7689

原创 STM32通讯讲解(概念)

一、通信的概念:在计算机设备与设备之间或集成电路之间常常需要进行数据传输。二、串行通讯与并行通讯(按数据传送的方式分)1、串行通信:串行通讯是指设备之间通过少量数据信号线(一般是8根以下), 地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。可以同时传输多个数据位的数据。2、并行通信:同一时刻只能传输一个数据位的数据。并行通讯与串行通讯的对比图三、全双工、半双工及单工通讯(按数据通讯的方向分)主要以信道的方向来区分四、同步通讯与异步通讯(按通讯的数据同步方式分)通讯过程中是

2021-09-12 01:35:22 479

原创 STM32F103利用定时器生成PWM实现呼吸灯代码解析(实测可用)

建立一个源文件即可#include "stm32f10x.h"#include "math.h"#include "stdio.h"u8 counter=0; int pwm=100;int flag=0;int mode =0;int velocity =0;int turning=1;//主要函数功能void RCC_Configuration(void); //时钟初始化,开启外设时钟void GPIO_Configuration(void); //IO口初始

2021-09-05 20:50:59 2119 1

原创 STM32——SysTick 定时器讲解(代码)

一、SysTick—系统定时器简介SysTick—系统定时器是属于CM3内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数器, 计数器每计数一次的时间为1/SYSCLK,一般我们设置系统时钟SYSCLK等于72M。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复。因为SysTick是属于CM3内核的外设,所以所有基于CM3内核的单片机都具有这个系统定时器,使得软件在CM3单片机中可以很容易的移植。 系统定时器一般用于操作系统,用于产生时基,维持操作

2021-09-05 20:39:37 6045 2

原创 外部中断/事件控制器——EXIT功能框图解析

一、 EXTI简介EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的20个中断/事件线。 每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置, 可以单独配置为中断或者事件,以及触发事件的属性。二、EXTI功能框图EXTI的功能框图包含了EXTI最核心内容,掌握了功能框图,对EXTI就有一个整体的把握,在编程时思路就非常清晰。EXTI功能框图见图 EXTI

2021-08-29 15:05:59 1941 1

原创 MQTT协议(概括与详解)

I概括一,MQTT协议1、MQTT协议可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。2、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。对负载内容屏蔽的消息传输。使用 TCP/IP 提供网络连接。3、实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

2021-08-25 16:52:35 23713 1

原创 stm32-EXIT外部中断实验

一、固件库代码://EXTI 初始化结构体typedef struct {uint32_t EXTI_Line; // 中断/事件线EXTIMode_TypeDef EXTI_Mode; // EXTI 模式EXTITrigger_TypeDef EXTI_Trigger; // 触发类型FunctionalState EXTI_LineCmd; // EXTI 使能} EXTI_InitTypeDef;解析:EXTI_Line:EXTI 中断/事件线选择,可选 EXTI0至 EXTI

2021-08-13 11:59:41 1095

原创 stm32时钟编程解析(超细节)

固件库编程使用HSE配置系统时钟并使用MCO输出监控时钟系统创建文件bsp_rccclkconfig.cbsp_rccclkconfig.huser文件夹——右键包含bsp_rccclkconfig.c文件再include “bsp_rccclkconfig.h”——魔术棒——c/c++——添加我就文件rcc(包含.c和.h)1、操作 .h#ifndef __BSP_PCCCLKCONFIG_H#define __BSP_PCCCLKCONFIG_H#include “stm32f10x

2021-08-12 12:41:00 380

原创 初识STM32中断(基础)

一、中断简介1、STM32中断非常强大,每个外设都可以产生中断,无特别说明,异常就是中断,中断就是异常。2、stm32可以中断嵌套中断优先级:数字越小优先级越大3、如图:主函数与中断程序二中断类型1、系统异常,体现内核水平(RESET复位)2、外部中断:体现在外设水平(GPIO)3、NVIC是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设NVIC外设简介:嵌套向量中断控制器,属于内核外设管理着包括内核和片上所有外设的中断相关的功能。两个重要的

2021-08-08 17:38:20 689

原创 STM32F1时钟(详解)

一、时钟树图表二、时钟详解(结合时钟树)HSE时钟(72M)HSE:High Speed-External Clock signal,即高速的外部时钟来源:无源晶振(4-16M),通常使用8M控制:RCC CR时钟控制寄存器的位16:HSEON控制HSI时钟HSI:Low Speed Internal Clock signal,高速的内部时钟来源:芯片内部,大小为8M,当HSE故障时,系统时钟会自动切换到HSI,直到HSE启动成功。控制:RCC_CR时钟控制寄存器的位0:HSION控制

2021-08-07 18:45:07 3477

原创 STM32——GPIO位带操作

一、代码 GPIO 输入输出位操作// 单独操作 GPIO 的某一个 IO 口,n(0,1,2...16),n 表示具体是哪一个 IO 口#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出#define PBin(n) BIT_ADDR(GPIOB_IDR_Ad

2021-08-06 18:42:53 1461

原创 stm32 按键输入控制LED灯

一、stm32 按键输入控制LED灯volatile是一个特征修饰符(type specifier).volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值输出寄存器:ODR BSRR BRR输入寄存器:IDR(0 低电平)#define __I volatile #define __I volatile const #define __O

2021-08-06 10:42:53 2041

原创 STM32固件库认识+固件库模板点灯

一、stm32固件库的认识1-汇编编写的启动文件startup_stm32f10xhd.s:设置堆栈指针、设置Pc指针、初始化中断向量表、配置系统时钟、······2-时钟配置文件system stm32f10x.c:把外部时钟HSE=8M,经过PLL倍频为72M3-外设相关的stm32f10x.h:实现了内核之外的外设的寄存器映射XX:GPIO、 USRAT、T2C、SPI、FsMCstm32f10x_xx.c:外设的驱动函数库文件stm32f10xxx,stm32f10x_xx.h:存放外设

2021-08-01 01:49:13 751

原创 STM32——新建工程(库函数)模板

一、 新建本地工程文件夹(5个)Doc:用来存放程序说明的文件,由写程序的人添加Libraries:存放的是库文件Listing:存放编译器编译时候产生的 C/汇编/链接的列表清单Output:存放编译产生的调试信息、hex文件、预览信息、封装库等Project:用来存放工程****加粗样式User:用户编写的驱动文件Doc:工程说明.txtLibraries1 .CMSIS:里面放着跟 CM3内核有关的库文件2 .STM32F10x_StdPeriph_Driver:STM32 外设

2021-08-01 01:01:47 704

原创 STM32F103寄存器代码详解及例子

输出模式(推挽/开漏)在输出模式中,推挽模式时双MOS管以轮流方式工作,输出数据寄存器GPIOx_ODR可控制I/O输出高低电平。开漏模式时,只有N-MOS管工作, 输出数据寄存器可控制I/O输出高阻态或低电平。输出速度可配置,有2MHz10MHz50MHz的选项。此处的输出速度即I/O支持的高低电平状态最高切换频率, 支持的频率越高,功耗越大,如果功耗要求不严格,把速度设置成最大即可。在输出模式时施密特触发器是打开的,即输入可用,通过输入数据寄存器GPIOx_IDR可读取I/O的实际状态。...

2021-07-23 11:08:41 3129 5

原创 学stm32前必需知识点

仿真的概念:仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。在嵌入式系统的设计中,仿真应用的范围主要集中在对程序的仿真上。例如,在单片机的开发过程中,程序的设计是最为重要的但也是难度最大的一种最简单和原始的开发流程是:编写程序烧写芯片验证功能,这种方法对于简单的小系统是可以对付的,但在大系统中使用这种方法则是完全不可能的。仿真器的概念:仿真器(emulator)以某一系统复现另一系统的功能。与计算机模拟系统(Computer Simulation)的区别在于,仿真器

2021-07-20 11:03:01 2831 3

原创 c\c++内存分配定义与用法(多种分配方式)

好文推荐:堆栈的区别:https://blog.csdn.net/summer_sy/article/details/88544433?spm=1001.2014.3001.5502堆栈的区别:https://dablelv.blog.csdn.net/article/details/80849966c语言内存分配基础:https://blog.csdn.net/youoran/article/details/10990815一、(C\C++).内存分成5个区(1)栈:内存由编译器在需要时自动分配

2021-07-15 11:57:25 511

原创 c语言结构体、枚举、共用体定义与使用(内含代码详解)

一、结构体结构体:(变量)struct{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩} stu1, stu2 = { "Tom", 12, 18, 'A', 136.5 };eg.(结构体数组) struct stu{ char *name; //姓名 int num; //学号

2021-07-14 00:00:16 995 2

原创 C++新手入门

用return这种形式就能定义返回值, return 0可以 终止 main() 函数,并返回值 0。return 0 代表程序正常退出,return 1代表程序异常退出!使用return 语句可以返回一个变量内的值或一个指针,也可用return0,表示返回为空。return 代表调到函数外,return 0代表函数正常终止return 1代表函数非正常终止而我觉得还有一个作用就是return之后你至少知道代码成功运行到最后一行,中间没有异常中止,并且return 关键字的还有一个作用是返回程序

2021-07-13 20:55:20 180

原创 c语言基础例题(面试必学)

一、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。要用全局变量,需要使用” :: ”局部变量可以与全局变量同名, 在函数内引用这个变量时, 会用到同名的局部变量,而不会用到全局变量。 对于有些编译器而言, 在同一个函数内可以定义多个同名的局部变量, 比如在两个循环体内都定义一个同名的局部变量, 而那个局部变量的作用域就在那个循环体内二、程序的内存分配答:一个由 c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack )—由编译器自动分配释放,存放函数的参数值,局部变量的值

2021-07-12 23:10:23 365 4

原创 arduino 学习

Arduino编程基础(二)——C\C++语言基础(上)https://www.arduino.cn/thread-45049-1-1.htmlArduino编程基础(二)——C\C++语言基础(下)https://www.arduino.cn/thread-45050-1-1.htmlArduino编程基础(三)——常用电子元件和扩展模块https://www.arduino.cn/thread-45117-1-1.htmlvoid setup() {// 在这里加入setup代码,它只会

2021-07-09 11:43:14 578

原创 ESP8266智能灯控

一,MQTT协议1、MQTT协议可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。2、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。对负载内容屏蔽的消息传输。使用 TCP/IP 提供网络连接。3、实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。4、MQT

2021-06-26 17:17:46 2031

原创 数组指针,函数,字符串

一、数组名作函数参数数组名做函数参数,函数的形参会退化成指针//形参改变实参#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<time.h>#include<math.h>#include<stdlib.h>/*void my_strcat(char* ch1, char* ch2){int i = 0;while (ch

2021-06-14 22:35:28 99

原创 数组指针、函数指针与多级指针及基础运算

一、指针与数组#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<time.h>#include<math.h>#include<stdlib.h>int main1(){int arr[] = { 100,2,3,4,5,6,7,8,9,10 };//数组名是一个常量 不允许赋值//数组名是数组首元素地址//arr=100;

2021-06-04 16:46:37 180

原创 函数,指针定义与使用

一、函数的分类:c程序是由函数组成的,我们写的代码都是由主函数main()开始执行的。函数是c程序的基本模块,是用于外层特定任务的程序代码单元。从定义角度上函数可分为系统函数和用户定义函数1、系统函数,即库函数:这是由编译系统提供的,用户不必自己定义这些函数,可以直接使用他们,如打印函数printf()。2、用户定义函数:以解决用户的专门需要。函数的作用:可以省去重复代码的编写,降低代码的重复率。步骤:导入头文件—使用函数—获取函数返回值二、函数的调用:产生随机数需要关心5个因素:1、头文件

2021-05-22 16:02:05 370

原创 整型数组,字符串,字符数组的使用

相同类型若干变量按有序形式组织起来形成数组*数组是在内存中连续的相同类型的变量空间变量的定义:数据类型 变量 = 值;数组的定义:数据类型 数组名[元素个数] = {值1,值2,值3};数据的提取使用:数组下标 数组名[下标] (下标从0开始)利用循环提取:eg1for(int i=0;i<10;i++){printf("%d\n",arr[i]);}数组在内存中的储存方式和大小1、 储存方式int arr[10]={1,2,3,4,5,6,7,8,9

2021-05-15 18:41:11 1380

原创 编程细节以及条件语句与循环语句嵌套

编程细节以及条件语句与循环语句嵌套*常量与字符串常量(char)%s表示输出一串字符串字符常量‘a’ 字符串常量“a”每个字符串结尾,编译器会自动添加结束标志位\0,即“a”包含两个字符“a”与\0printf 输出一个字符串putchar 输出一个char (专门)用于char printf(“%c\n”,a);等于 putchar(a)或者(97)ASCII码; 表示相同输出aputchar() 括号内可以输入转义字符(‘……’),变量,数字,字符(但必须在ASCII

2021-05-02 10:41:37 463

原创 初学c语言

初学c语言 这一周观经过了十几个小时的c语言的学习,来谈谈我对c语言的了解。 **第一部分**——c语言程序编写软件 Microsoft visual studio 2019 下载链接与安装 https://zhuanlan.zhihu.com/p/94998894 **第二部分**——c语言的分布编译 1、预处理:宏定义展开,头文件展开,条件编译,去掉注释 2、编译:检查语法,将c语言转换成c汇编语言 3、汇编:将汇编语言转换成机械语

2021-04-24 18:41:53 252

空空如也

空空如也

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

TA关注的人

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