自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STM32串口通信

STM32有3~5个全双工的串行异步通信接口,可实现设备之间的串行数据的传输。其USART的主要组成部分包括接收数据输入(RX)和发送数据输出(TX)、清除发送(nCTS)、发送请求(nRTS)和发送器时钟输出(CK)等相应的引脚。其内部包括发送数据寄存器(TDR)、接收数据寄存器(RDR)、移位寄存器、IrDA SIR编解码模块、硬件数据流控制器CL制送器制醒单元、接收器控制、 ART 中断控制和波特率控制等。但是传送数据的过程于接收数据的过程不可以同时进行。但其可适用于点对多点。串口操作相关函数步骤。

2023-01-08 10:28:16 572 1

原创 STM32时钟系统

这个函数就是在配置CR,CFGR,ACR(设置FLASH)寄存器的某些位(使能,判断是否就绪,设置相应位,设置FLASH,设置AHB,APB预分频系数,设置HCLK,PCLK等等外设时钟,设置PLL锁相环倍频系数最终确定系统时钟)。APB1 分频器输出一路供 APB1 外设使用(PCLK1,最大频率 36MHz),另一路送给定时器(Timer)2、3、4 倍频器使用。系统时钟的初始化中,系统中会有初始化,参数是默认的。在STM32中,有五个时钟源,为 HSI、HSE、LSI、LSE、PLL。

2023-01-06 23:29:31 361

原创 【无标题】

硬件基础知识学习:一,去耦电容的应用: 在原理图左侧电路,分别接了一个100uF和0.1uF的电容。首先来介绍容值较大的:其起到的作用主要有:(1)缓冲作用:当上电的瞬间,电流从电源处流下来的时候,不稳定,容易冲击电子电器,加个电容可以起到缓冲作用。(2)稳定作用:电路中后级电子器件的功率大小都不一样,而器件正常工作的时候,所需电流的大小也不是

2022-12-04 22:39:02 217

原创 串口初始化(LED灯,通信,按键,中断)

STM32 的发送与接收是通过数据寄存器 USART_DR 来实现的,这是 一个双寄存器,包含了 TDR 和 RDR。当向该寄存器写数据的时候,串口就会自动发送,当收 到收据的时候,也是存在该寄存器内。一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射,映射到其他的端口。其中(GPIO_PinRemapConfig()),为端口重映射相关的函数,用于打开串口另一个功能。部分重映射:功能外设的部分引脚重映射,还有一部分引脚是原来的默认引脚。外部中断,使能AFIO时钟。.

2022-08-11 11:43:12 2635

原创 USART1_IRQHandler 函数

到了这一步,就说明这一串数据已经完完全全的接收完了USART_RX_STA = 1100 0000 0000 0100,最高位为1:代表接收到了0x0a,第十四位为1:代表接收到了0x0d,第0位到第13位为4,代表接收到了4位有效数据(a、b、c、d)我们可以清晰的看到bit13~0位是4,代表接收到了4个数据(a,b,c,d),第14位为1,是因为接收到了数据0x0d,也和最上面给的表对上了,然后程序向下执行,接收到了0x0d(回车),那下一个就是接收0x0a(换行)了。...

2022-08-09 20:10:34 8572 2

转载 电机驱动的学习笔记

常见双H桥电机驱动模块:H桥电路通常包含四个独立控制的开关元件,通常用于驱动电流较大的负载,比如电机。如图:这里有四个开关元件Q1,Q2,Q3,Q4,另外还有一个直流电机M。我们可以通过 对Q开关的控制,来驱动直流电机。而其中的正转和反转是人为规定的方向。例如正转:打开Q1和Q4 关闭Q2和Q3此时假设电机正转,电流依次流过Q1,M,Q4。如下图:应用:实际应用时,市面上常用的电机驱动的型号,通常接上电源,电机,通过控制信号就可以驱动电机了。由于网上找到的资料为.

2022-05-20 15:24:47 1501

原创 Arduino基础应用学习

语言:使用Setup和loop这个两个函数:Arduino软件结构包括两个主要函数: Setup()函数初始化变量,管脚模式,调用库函数等 Loop()函数连续循环执行loop函数内的程序(可以理解成while(1);) 在Arduino控制器通电或复位后,,程序启动时会调用 setup()函数。setup函数只能在Arduino板的每次上电或复位后运行一次。loop() 让你的程序循环地被执行。使用它来运转Arduino。这部份的程式会一直重复的被执行,直到Ardu...

2022-05-14 23:41:57 3832 1

原创 单片流水灯

流水灯代码#include<REGX51.H>#include <INTRINS.H>int main(){ while(1) { P0=0XFE; for(i=0;i<30000;i++); P0=0XFD; for(i=0;i<30000;i++); P0=0XFB; for(i=0;i<30000;i++); P0=0XF7; for(i=0;i<30000;i++); P0=0XEF; for(i=0;i<

2022-05-05 15:29:54 457

原创 单片机五一学习笔记

本人使用的为STC15W4K系列的51单片机硬件基础知识学习:一,去耦电容的应用: 在原理图左侧电路,分别接了一个100uF和0.1uF的电容。首先来介绍容值较大的:其起到的作用主要有:(1)缓冲作用:当上电的瞬间,电流从电源处流下来的时候,不稳定,容易冲击电子电器,加个电容可以起到缓冲作用。(2)稳定作用...

2022-05-05 15:12:42 321

原创 单片机之LED闪烁

程序代码编写:在单片机中有几条很特殊的程序语法以及keil软件的基本操作步骤:sfr P0= 0X80;其中,sfr是关键字,是51单片机独有的,他的作用是定义一个单片机特殊功能寄存器。51单片机内部中有许多寄存器,如果想使用的话,必须先进行sfr声明。不过在keil软件中,已经把所有这些声明都预先写好了并保存在一个专门的文件中,要使用时只需在文件开头添加一条#include <reg52.h>;与#include <reg51.h>大体相同,只是在使

2022-04-26 15:33:24 6120

原创 指针与函数

指针作为函数的返回值在C语言中,地址也可以作为一个返回值,被函数返回。但值得注意的是,不能在实现函数时返回在函数内部定义的自动变量的地址。因为作为自定义函数的局部变量,在函数返回时就会自动消亡,其储存单元不再有效。因此,返回指针的函数一般都返回主调函数或者静态存储区中变量的值,值得一提的是,在函数中是通过动态内存分配方式建立的内存单元,其地址也可以正常返回。#include "stdio.h"char *find(char *s,char ch);int main(void){

2022-04-22 16:30:07 1376

原创 单片机学习笔记

单片机内部资源(提供给用户可用)(1)Flash——程序存储空间,早期单片机OTPROMFlash以其可重复擦写且容量大,成本低的优点成为现在绝大多数单片机的程序存储器。对于单片机来说,Flash最大的意义是断电后数据不丢失。(2)RAM——单片机的数据存储空间用来存储程序运行过程种产生的和需要的数据,跟计算机的内存为相似概念。(3)SFR——特殊功能寄存器单片机有很多功能,每个功能都会对应一个或多个SFR,用户就是通过对SFR的读写来实现单片机的多种多样的功能。单片机最小系

2022-04-21 23:46:58 1001

原创 按位运算与移位运算

以下都以2进制数进行分析理解:1,按位与 &如果(x)i=1并且(y)i=1,那么(x&y)i=1.否则的话,(x&y)i=0;按位与常用于两种应用:让某一位或某些位为0:x&0xFE取一个数中的一段:x&0xFF;例如:(1110 0101)&(1101 0111)=(1100 0101);2.按位或 |如果(x)i==1或(y)i==1,那么(x|y)i=1,否则(x|y)i=0.按位或 的两种应用:使得以为或几

2022-04-18 21:35:33 452

原创 命令行参数

DOS:DOS(全称为Disk Operating System,被称为磁盘操作系统)Dos是实模式的操作系统,Dos系统必须用Dos语言才能实现对计算机的使用(即所有操作都需要命令)。UNIX:UNIX是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统。命令行参数:C语言源程序通过编译和连接处理,生成可执行程序后,才能运行。可执行文件又称为可执行文件或命令。test.c是一个简单的C语言源程序,经编译和连接后,生成可执行程序test.e

2022-04-18 20:03:28 1246

原创 近日指针进阶学习笔记

指针的空间分配:指针没有被初定义的时候,其没有指向确切的内存空间。动态分配:为指针分配了空间:此时令p="sssss"等价于char a[10]="sssss";//为a初定义分配的空间;p=a;此时p与a指向的是同一片空间;而sizeof(p,a)此时只是把a空间上的值复制到p所指的空间里,但a和p所指向的为两片不同的空间。则,一旦当p明确了其指向的空间时,我们可以将值赋给所对应的内存单元,对于数组名,其地址值已经确定,便为常量,是不可以更改的;但数组变量是可以

2022-04-15 16:30:28 210

转载 51单片机入门

单片机:单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。环境配置:下载keil和烧录软件:

2022-04-10 15:28:07 887

原创 C指针进阶

数组指针和指针数组:表达的优先级问题:(*p)[n]:根据优先级,先看括号内,则p是一个指针,这个指针指向一个一维数组,数组长度为n,这是“数组的指针”,即数组指针;*p[n]:根据优先级,先看[ ],则p是一个数组,再结合*,这个数组的元素是指针类型,共n个元素,这是“指针的数组”,即指针数组。来看一个关于指针数组的代码:const定义的变量在程序里禁止被改变。#include "stdio.h"int main (void ){ int i,flag; ch

2022-04-08 22:55:03 245

原创 C语言中大程序构成————多文件模块

程序文件模块:当多人合作代码时,每个人所编写的程序会保存在自己的.c文件中。这样一个大程序会由几个文件组成,每个文件又可能包含若干个函数。C语言把保存有一部分程序的文件称为程序文件模块。当大程序分成若干个函数。可以对各文件模块分别编译,然后通过连接,把编译好的文件模块连接再合起来,生成可执行程序。包含.c文件与.h文件:1.包含.c文件  直接将代码写在.c文件中,其他文件要调用函数则直接包含.c文件。正如下面一段代码://fun.cint h = 0;int cal(int a,

2022-04-04 18:20:39 2053 2

原创 还是学C的一天

递归主要构成:(1):递归出口,即递归的结束条件,到何时不再递归调用下去。(2):递归式子,即递归的表达式。递归思想在一定程度上,与数学上的数学归纳法相似。以此找递归表达式。汉诺塔问题:#include "stdio.h"int main (void ){ void hanoi (int n,char a,char b,char c); int n; printf("input the number of disk:"); scanf("%d",&a

2022-03-31 23:46:11 228

原创 c语言学学学2

结构数组:定义方法:struct student students[50];结构数组的每个元素都是结构变量,其使用方法如下:结构数组名【下标】.结构成员名此外,结构数组中的数组元素之间可以相互赋值。学生成绩排序:#include<stdio.h>struct student{ int num; char name[10]; int computer,english,math; double average; } ; int main(void) {

2022-03-27 23:07:09 533

原创 结构学习NO.1

结构:是C语言中一种新的结构数据类型,它能够把有内在联系的不同类型的数据汇聚成一个整体,使它们互相关联。结构类型是由用户根据需要,按规定的格式自行定义的数据类型。结构类型定义的一般形式:struct 结构名{ 类型名 结构成员名1; 类型名 结构成员名2; 。。。 类型名 结构成员名n;};大括号内的内容是结构所包括的结构成员,也叫结构分量。大括号中定义的成员信息被聚合成了一整体并形成了一个新的数据类型。关键词struct和它后面的结构名一起组成一个新的数据

2022-03-22 23:19:59 516

原创 c语言学学学

指针实现内存动态分配:使用内存分配方法:1.编译系统分配的内存区;2.用内存动态分配方式,留给程序分配的存储区。动态分配的存储区在用户的程序之外,不是由编译系统分配的,而是由用户在程序中通过动态分配获取的。使用动态内存分配能有效的使用内存,同一段的内存区域可以被多次使用,使用时申请,使用完释放。动态内存分配步骤:1.了解需要多少内存空间。2.利用C语言提供的动态分配函数来分配所需要的存储空间。3.使指针指向获得的内存空间,以便指针在该空间内实施运算或操作。4.当使用完内存后,

2022-03-20 16:01:53 559

原创 C语言复习8

指针运算*p++,*++p,(*p)++ 与 ++(*p)的理解:*p++:(等同于*p,p=p+1;)*p++并不等同于*(p++)。++后置的时候,本身含义就是先运算后增加1,所以实际上*p++符号整体对外表现的值是*p的值,运算完成后p再加1.int a [3]={1,2,3};int *p=a;printf("%d",*p++);//此处输出为1,而不是2*++p:(等同于p=p+1,*p):++在p的前面,++前置的含义是,先加1,得到一个新的p(它的值是原来p的值加1)

2022-03-17 17:32:06 1361

原创 C语言复习7

指针:C语言程序运行中,变量或程序代码被存放在以字节为单位组织的存储器中。一般以变量所在的内存单元的第一个字节的地址作为它的地址;指针变量定义:类型名 *指针变量名* 为指针声明符,也可作为间接访问运算符。指针赋值:指针之间的相互赋值只能在相同类型的指针之间进行,指针之间也可以相互赋值,可以用初始化了的指针变量给另一个指针变量作初始化。不能用数值作为指针变量的初值,但可以将一个指针变量初始化为一个空指针指针赋值中,p=0等价于p=NULL;指针运算:在C语言中,指针的算术

2022-03-13 23:10:27 1156

原创 C语言复习6

二维数组:类型名 数组名【行长度】 【列长度】#include<stdio.h>#define MAXM 6#define MAXN 6int main(void){ int col,row,i,j,m,n; int a[MAXM][MAXN]; printf("enter number of m ,n\n"); scanf("%d %d",&m,&n); printf("please enter number %d :",m*n); f

2022-03-09 23:37:11 1933

原创 C语言复习5

静态变量:static 类型名 变量表静态变量在函数运行中其存储单元会被保留,使上一次函数调用后的值依然保存着,可供本次调用使用。#include<stdio.h>double fact_s (int n);int main(){ int i,n; printf("enter n: "); scanf("%d",&n); for(i=1;i<=n;i++) { printf("%3d!=%.0f\n",i,fact_s (i)); } retu

2022-03-05 17:18:03 912

原创 C语言复习4

局部变量于全局变量局部变量:被定义在函数的内部,它们的有效使用范围也被局限于所在的函数之内。其最大程度的确保了个函数之间的独立性。除了作用于函数的局部变量外,还有定义于复合语句中的局部变量,其有效使用范围被局限于复合语句中,一般作用于小范围的局部变量。局部变量一般定义 在函数或复合语句的开始处。int main (void){int a =1;//主函数的局部变量{int b=2;//复合语句的局部变量}...}全局变量:定义在函数外而不属于任何函数的变

2022-03-01 22:33:40 254

原创 C语言复习3

自定义函数:一般形式:函数类型 函数名(形式参数表) //函数首部(形式参数表不可写成类double r,h的形式){函数实现过程 //函数体}函数的调用:函数名(实际参数表)1,函数的形参必修为变量,形参是不参与实际函数运算的。2,函数的实参可以的变量,常量或者表达式,其作用是把变量,常量或者表达式的值传给形参。按照C语言的规定,在参数传递的过程中,把实参的值复制给形参,这种参数传递的过程是单向的,只允许实参把值复制给形参,即使形参的值在函数中被改变了,也不会反过.

2022-02-27 20:49:24 424

原创 C语言复习2

格雷戈里公式求Π近似值练习#include<stdio.h>#include<math.h>int main(void){ int denominator,flag,i; double eps,item,pi; printf("enter \nyour eps="); scanf("%lf",&eps); denominator=1;//分母 i=1;//存放项数 flag=1;//存放符号 item=1.0;//存放i项的值 pi=

2022-02-25 22:27:45 656

原创 【无标题】c语言复习1

c语言中的字符型:1,定义时用类型名char; 2,scanf()中用%c; 3,输入时注意‘ ’,在c中这也算一个字符#include<stdio.h>int main(void){int a,b;char op;printf("enter your expression");//提示输入一个算式表达式scanf("%d%c%d",&a,&b,&op);//输入表达式时,注意不可存在空格字符型数据的输入与输出1.字符型输入函数getchar

2022-02-24 11:15:53 576

原创 【无标题】指针总结

2022-01-21 22:16:14 363

原创 指针------二

#include <stdio.h>int main (int argc,char *argv[]){ int a[5]={0,1,2,3,4,}; int*p; p=a; printf("%d\n",a[2]); printf("%d\n",p[2]); printf("%d\n",*p+2);//此处用*p++时,打印出'0’。因为,此时为int 型函数,*p++在C中默认加4个字节。 int b[5]={1,2,3,4,5,};...

2021-11-07 16:41:12 502

原创 数组----C语言

数组#include<stdio.h>int main(){ const int size =3; int board[size][size]; int i,j; int numofx; int numof0; int result =-1; //对游戏结果的定义 for( i=0;i<size;i++) { for( j=0;j<size;j++ ) { scanf(......

2021-10-21 23:51:03 1632

原创 2021-10-18

经典的问题解决计算机的循环关于计算机进制的转化看的时候做的手写笔记,比较习惯于在手写,最大程度发挥笔记对自己的使用性...

2021-10-18 00:47:25 64

原创 c语言指针笔记

指针含义:指针就可以简单的理解为地址。就是说,可以通过它找到以它为地址的内单元,即信息。C语言中的地址包括位置信息(纯地址)和它所指向的数据的类型信息。所以,指针得含义就包含两个方面:一是以存储单元编号表示的纯地址,二是它指向的存储单元的数据类型(int,char,float等)而在C语言中,对变量的访问有两种方式。(1)直接访问:按变量名进行访问(2)间接访问:通过地址进行访问,地址则是变量存在内存中的数的地址。而指针和指针变量是两个概念,指针是一个地址,指针变量是一个存放地址的变量例

2021-10-03 22:49:10 200 1

原创 C语言入门程序

1.找零#include <stdio.h> int main(){ int price=0; printf("请输入金额 (元)"); scanf("%d", &price); printf("找您%d元\n", 100-price); return 0;}基本函数的意义认识int 整函型数 printf输出 scan输入 \n换行符 %d读取 2.充分理解程序思想,着手进行程序变形。计算简单的数字加减,理...

2021-09-26 23:19:49 2415

空空如也

空空如也

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

TA关注的人

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