自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 江科大stm32学习笔记【6-2】——定时器定时中断&定时器外部时钟

此时CK_PSC=72M,定时1s,也就是定时频率为1Hz,所以可以PSC=7200-1,ARR=10000-1。

2024-03-15 10:21:05 625 1

原创 江科大stm32学习笔记——【6-1】TIM定时中断

对预分频后的计数时钟进行计数,计数时钟每来一个上升沿计数器的值就加1,计数器最高可加到65535(16位),再加的话,计数器就会回到0重新开始,所以计数器的值在计时过程中会不断地自增运行,当自增运行到目标值时,产生中断,那就完成了定时的任务。就是存储目标值的寄存器,存我们写入的计数目标,当计数值等于自动重装值时,计时时间到了,自动重装寄存器就会产生一个中断信号并且清零计数器,计数器自动开始下一次的计数计时。对于通用计时器而言,时钟源不仅可以选择内部的72MHz时钟,还可以选择外部时钟。

2024-03-13 15:10:12 598

原创 江科大stm32学习笔记——【5-2】对射式红外传感器计次&旋转编码计次

1.旋转无反应,调试发现因为有的面包板中间不相连,所以要用跳线相连。2.旋转太慢时记不上数,最后在中断代码那里加了一个if语句防抖。一.对射式红外传感器计次。

2024-02-29 23:03:38 499

原创 江科大stm32学习笔记——【5-1】EXIT外部中断

用来测量位置,速度或旋转方向的装置,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向。中断嵌套:当一个中断程序 正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而处理新的中断程序,处理完后依次进行返回。中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。支持的触发方式:上升沿,下降沿,双边沿(上升沿和下降沿都可以触发中断),软件触发。

2024-02-29 17:26:25 904

原创 江科大stm32学习笔记——【4-1】OLED

Keil调试模式:借助Keil软件的调试模式,可使用单步运行,设置断点,查看寄存器及变量等功能。劣势:调试的时候要拖着电脑。只能以信息流的方式呈现数据。串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息。劣势:屏幕太小,显示界面有限。串口调试的优势:不仅可以显示单独的参数,还可以显示曲线,图形,图像等。显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上。显示屏调试的优势:对于不断变化的数据可以覆盖刷新显示。前面的数字参数是定位,eg.第2行第1列。

2024-02-28 15:31:03 487

原创 江科大stm32学习笔记——【3-3】GPIO输入:按键控制led&光敏传感器控制蜂鸣器

当按键松手时,PA0被悬空,引脚电压不确定,所以必须要求PA0是上拉输入的模式,否则会出现引脚电压不确定的情况,这样引脚再悬空,PA0就是高电平。图一:当按键按下时,PA0被直接下拉到GND,此时读取PA0口的电压就是低电平。当按键松手时,引脚由于上拉作用,自然保持高电平。当按键按下时,引脚直接接到GND。传感器元件的电阻会随外界模拟量的变化而变化,通过。蜂鸣器的光敏传感器的驱动程序(和LED类似)上面两个是下接按键,下面两个是上接按键。三.光敏传感器控制蜂鸣器。一般用下接按键的方式。

2024-02-27 19:20:35 818

原创 江科大stm32学习笔记——【3-2】GPIO输出:LED闪烁&LED流水灯&蜂鸣器

以下所有库函数从gpio.h文件最下方查找,参数也是对函数定义查找后自己填写。跳线连接单片机3.3和面包板正极,连接单片机GND和面包板负极。(也可以LED负极连面包板负极,LED正极连接单片机A0口)LED灯正极连接面包板电源正极,LED负极连接单片机A0口。2.使用GPIO_Init函数初始化GPIO。开漏输出的模式高电平没有驱动能力。延时函数要加头文件注明。

2024-02-22 21:56:09 486

原创 C语言进阶(一)动态分配内存

头文件:stdlib.h string.h一.申请动态分配内存malloc中定义函数,向系统申请大小为的内存空间。返回结果是,使用时转换成需要的指针类型。如果申请失败,返回。二.释放动态分配内存free()三.初始化动态分配内存calloc在Linux中malloc和calloc都会分配近似于四.重新调整内存大小realloc...

2022-07-12 23:28:19 336 1

原创 C语言初阶(十)类型重命名typedef

一.基本类型重命名二.结构体/联合体类型重命名在定义结构体同时,可以定义结构体指针。三.函数指针类型重命名例:

2022-06-14 19:28:35 1440

原创 C语言初阶(九)枚举

一.常量符号化1.const2.#define3.枚举 作用域二.枚举1.是什么枚举是一种用户定义的数据类型,枚举可以看作是一组宏定义。2.怎么用枚举大括号里面的名字是常量符号,类型为int,值依次从到。枚举就是给这些常量值,规定一个名字。 声明枚举时可以指定值也可以其中一个值,后续值依次加1...

2022-06-14 18:55:54 161

原创 C语言初阶(八)联合体

一.定义联合体是成员共用内存空间。二.作用1.在不同时刻把不同东西存在同一个位置时可以使用联合体例:声明了一个结构体和一个联合体,联合体内部包含了一个结构体和一个无符号整形数据(32位的)定义三原色分别为0X11、0X22、0X33,然后不再做任何处理,直接打印value 输出:CC332211先对value赋值,然后再输出R、G、B值 输出:56 \t 34 \t 12三.初始化联合变量可以被初始化,但这个初始值必须是联合的第一个成员的类型,而且它必须位于一对花括号内。...

2022-06-14 18:26:53 232

原创 C语言初阶(七)结构体

一.结构体操作1.取地址结构体名不是结构体变量的地址,必须使用获取地址。数组名即地址。2.传参 整个结构体作为参数的值传入函数。这时候在函数内新建一个结构体变量并复制值。结构体可以作为返回值,也是结构体整体复制。二.结构体指针 1.结构体指针访问成员 通过修改结构体指针指向的成员,也会改变结构体变量成员的值。2.结构体指针作为参数 三.结构数组四.结构体嵌套结构体含有结构体数组:...

2022-06-14 17:18:42 95

原创 C语言初阶(六)函数

一.函数原型函数头以结尾,构成函数原型。函数原型通常放在头文件里面或者调用它的函数的前面。提前告诉编译器使用的函数基本信息(名称、参数个数类型、返回类型)。通常把放在代码最前面便于阅读,但是这样会导致编译时因为找不到内部调用函数而错误或警告。在前加上函数原型可以解决这类问题,称为函数前置声明。二.指针与函数 1.函数名 函数名与数组名一样表示的是地址,不同的是函数名是执行函数代码的起始位置,数组是数组第一个元素的地址。 2.函数指针 函数指针是指向函数的指针变量,即本质是一个指针变量。 例:实现

2022-06-14 17:00:32 212

原创 C语言初阶(五)指针

23一.指针运算1.算术运算①+,-指针与整数相加:表示指针指向下个变量。指针与整数相减:表示指针指向上个变量。 指针与指针相减:两个指针的元素间隔个数。②自增自减++,-- *p++/*p-- --> *(p++)*++p/*--p --> *(++p)++*p --> ++(*p)2.比较运算、、、、、本质是比较内存中的地址。 二.指针类型 指向不同类型的指针不能直接相互赋值(特例),需要强制类型转换。 类型的指针是一种很特别的指针,表示指向未知类型的指针,并不指定它是指向哪一种类型的

2022-06-10 20:28:49 349

原创 C语言初阶(四)进制

一.进制常量表示C语言不能直接表示二进制常量。八进制数字以开头,十六进制数字以或开头。 二.输入 输出 十六进制数字的表示用到了英文字母,有大小写之分,要在格式控制符中体现出来:区分不同进制数字的一个简单办法就是,在输出时带上特定的前缀。在格式控制符中加上即可输出前缀...

2022-06-09 22:30:01 258

原创 链表(b站“C语言基础“笔记)

(一)单链表一.定义struct Node{ int data;//数据域 struct Node* next;//指针域};二.创建链表struct Node* createList(){ struct Node* headNode=(struct Node*)malloc(sizeof(struct Node)); //headNode成为了结构体变量 //变量使用前必须被初始化 headNode->next=NULL...

2022-06-03 00:23:11 114

原创 C语言入门(三)控制语句入门、运算符与变量扩展、控制语句扩展

(一)控制语句入门一.条件判断语句1.if-else语句if(条件){ /* 如果表达式为真将执行的语句 */}else{ /* 如果表达式为假将执行的语句 */}2.if语句if(条件){ /* 如果表达式为真将执行的语句 */}3.if-else if-else语句if(条件1){ /* 当条件1为真时执行 */} else if(条件2){ /* 当条件2为真时执行 */} else if(条件3){ /* 当条件3为真时

2022-04-27 22:58:53 62

原创 xxx_cast类型转换

类型转换隐式类型转换 显式类型转换1.static类型转换2.const类型转换#include<iostream>#include<vector>using namespace std;int main(){ int* n = NULL; void* p = n;//隐式转换 //C语言类型转换方式 n = (int*)p;//显式转换 char c = 'a'; cout << c << endl; c..

2022-01-26 17:00:15 6064

转载 STL算法总结

构成头文件 功能 <algorithm> 算法函数 <numeric> 数值算法 <functional> 函数对象/仿函数 分类No. 分类 说明 1 非可变序列算法 Non-modifying sequence operations 不直接修改容器内容的算法。 2 可变序列算法 Modifying sequence operations 可以修改容器内容的算法。

2022-01-26 10:38:16 110

原创 STL仿函数

一.概念#include<iostream>using namespace std;class Test{int n,m;public: Test(int n,int m):n(n),m(m){} int operator()(){//仿函数对应的类要重载括弧运算符 return n+m; } int operator()(int h){ return n+m+h; }};int main(){ Test t(1,2); cout <<

2022-01-23 13:57:39 5148

原创 STL映射容器map

简介:map是key-value构成的集合。key必须唯一。特点:一对多映射,基于关键字快速查找,不允许重复值主要用来查找key对应value,要求key必须是可排序的,必须支持<比较运算符。 map默认是以key升序存放键值对<key,value>数据,比较适合二分查找。#include<iostream>#include<map>using namespace std;int main(){ //1.定义: map<stri..

2022-01-22 16:31:09 491

原创 STL集合容器set

特点:快速查找,不允许重复值特性:确定性,互异性,有序性#include<iostream>#include<set>using namespace std;template<typename T>void PrintContainer(const T& c){ for(int n:c){ cout << n << " "; } cout << endl;}int main(){ //1..

2022-01-16 16:48:31 245

原创 STL容器总结vector

一.容器简介顺序容器容器 模板 特点 向量容器 vector 从后面快速插入与删除,可以直接访问任何元素。 双向列表容器 list 从任何地方快速插入与删除 双端链表容器 deque 从前面或者后面快速插入与删除,可以直接访问任何元素。 遍历:#include <iostream>#include <vector>using namespace std;int main(){ vector&.

2022-01-16 10:58:27 334

原创 C++语言入门(十一)模板

一.模板可以使函数或者类只写一份代码而对应不同的类型。函数模板:模板声明:template <模板形参表> 函数返回类型 函数(形参表);模板定义:template <模板形参表>函数返回类型 函数(形参表){ 函数体;};例如:#include <iostream> using namespace std;template<typename T> // T 为类型名T Max(T a,T b){ /..

2022-01-08 17:11:14 337

原创 C++语言入门(十)异常

异常分为抛出异常和捕获并处理异常抛出异常throw 表达式;捕获并处理异常try { // 保护代码 包含可能抛出异常的语句; } catch (类型名1 [形参名]) { // catch块 处理异常} catch (类型名2 [形参名]) { // catch块 处理异常} catch (类型名3 [形参名]) { // catch块 处理异常} catch(...){ // c

2022-01-08 12:09:41 109

原创 C++语言入门(九) 文件

(一)流一.流定义:数据从一个对象到另一个对象的传输。功能:标准输入输出+文件处理分类:文本流 一串ASCII字符 二进制流 一串二进制二.流类型1.标准I/O流ios是抽象类 ostream是cout,clog,cerr的类 istream是cin的类2.文件流类型 ifstream从文件读取数据 ofstream向文件写入数据 iofstream文件读写数据3.字符串流类型istringstream从string读取...

2022-01-08 09:42:42 276

原创 C++语言入门(八) 多态

一.继承补充当子类和父类有拷贝构造函数和赋值运算符重载函数时,在子类中需要负责父类的拷贝和赋值(最好使用默认的)Derice(const Derice& d):Base(d){ n = d.n;}Derice& operator=(const Derice&){ n = d.n; Base& b = *this; b = d; //赋值兼容 return* this; }...

2022-01-04 08:41:19 40

原创 C++语言入门(七) 继承

一.原则:父类/子类基类/派生类二.语法:class 派生类 : [访问限定符] 基类 { 成员}例:(成员函数)#include<iostream>using namespace std;class Father{public: Father(){ cout << __func__ << endl; } ~Father(){ cout << __func__ << endl; } void

2022-01-01 23:51:36 528

原创 C++语言入门(六)内联函数和运算符重载

一.内联函数inline作用:编译时将函数体代码和实参代替函数调用语句条件:一般用在代码比较简单的函数语法:关键字inline必须与函数实现/定义体放在一起才能使函数成为内联,将inline放在函数声明前面不起任何作用 定义在类声明之中的成员函数将自动地成为内联函数 通常内联函数定义在头文件中。 #include<iostream>using namespace std;// #define MAX(a,b) ((a)>(b)?(a):(b)) 只负..

2021-12-30 16:15:39 386

原创 C++语言入门(五)友元及限定符

2021-12-26 11:54:39 409

原创 C++语言入门(四)引用 拷贝构造函数 赋值运算符重载函数

一.引用(别名)#include<iostream>using namespace std;void func(int* p){ *p = 11;}void func2(int& q){//引用 cout << "&q:" << &q << endl;//本质上n和q指向同一个地址,只是名字不同 q = 12;}int main(){ int n = 10; cout << n <&l

2021-12-25 21:14:59 651

原创 C++语言入门(三)构造析构函数

一.构造函数在对象被创建时自动执行 可以有多个构造函数调用时机:1.对象直接定义创建--构造函数不能被显式调用(栈)2.new动态创建(堆)例:定义一个账单#include<iostream>#include<vector>#include<string>using namespace std;class Bill{private: string name; int count; float price;public: B.

2021-12-25 16:20:03 453

原创 C++语言入门(二) 类与对象

一.类的定义(与struct相似)#include <iostream>using namespace std;class Point{//定义类 public: int x; int y; int z; void Print(){// void Print(Point* this) 下式中的 this-> 可省略 cout << "(" << this->x << "," << this->y &l

2021-12-25 15:08:25 423

原创 C++语言入门(一)从C过渡到C++

输出hello world#include <iostream>using namespace std;int main(){ cout<< "Hello world" <<endl; }头文件#include <iostream> 命名空间 (名称空间)using namespace std; 标准输出流cout、输出运算符<<、换行控制器endl一.源文件后缀1.头文件后缀名:.hpp .h2.源文件后缀.

2021-12-19 13:53:16 738

原创 C语言初阶(三)字符串

一.字符串1.字符串遍历①数组方式char str[]="Hello World";for(int i = 0;'\0' != str[i];++i){ printf("%c\n",str[i]);}②指针方式char str[]="Hello World";for(int i = 0;'\0' != *(str+i);++i){ printf("%c\n",*(str+i));}简化:while('\0' != *str){ printf(

2021-12-12 10:15:17 849

原创 C语言初阶(二)数组

一.初始化1.整体初始化①数组未初始化,数组里面的值都是随机值。int arr[12];for(int i=0;i<12;++i){ printf("%d ",arr[i]);}②数组初始化为{0},数组里面的值都是0。int arr[12] = {0};for(int i=0;i<12;++i){ printf("%d ",arr[i]);}③数组初始化为非零值,数组里面第一个值是非零值,其他的值都是0。int arr[12] =.

2021-12-03 15:46:10 678

原创 C语言初阶(一)基本数据类型

(一)基本数据类型一.数据类型

2021-11-18 22:59:55 581 1

原创 C语言入门(八)结构体入门

一.结构体是什么不同类型的多个变量放在一起的集合 (数组为相同类型)二.结构体是什么1.定义结构体struct 结构体名{ 成员列表;};例:定义一个学生的结构体struct Student { char name[32]; //姓名 int age; //年龄 float score; //成绩};2.定义结构体变量struct Student student1;就定义了一个Student类型的结构体..

2021-11-17 22:23:01 304

原创 C语言入门(七)字符串入门

一.字符串是什么存放字符(char)的数组称为字符数组。在C语言中,使用NULL字符('\0')终止的一维字符数组被称作字符串。二.字符串怎么用1.初始化char 字符串变量名[字符数量] = {字符1,字符2,....,'\0'};也可更简便,eg.char greeting[] = "Hello World";2.输入输出使用scanf()函数和printf()函数,但占位符是%s3.访问字符跟数组一样4.遍历...

2021-11-17 21:36:14 545

原创 C语言入门(六)数组入门

一.数组是什么是用以储存一个数列中数据的集合。二.数组怎么用1.定义数组语法:类型 数据名[元素个数];在定义数组时,需要指定元素的类型和元素的数量。在C99中可以使用整型变量作为元素个数;在C89中只能使用整型常量。2.初始化数组类型 数组名[元素个数] = {值1,值2,值3,值4,等等};初始化数组可以不指定数组大小,此时数组的大小则为初始化时元素的个数。三.数组遍历for (int i=0;i<n;i++){ // 依次生成从0~n-1个.

2021-11-04 19:50:21 190

空空如也

空空如也

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

TA关注的人

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