江科大stm32学习笔记——【6-1】TIM定时中断 对预分频后的计数时钟进行计数,计数时钟每来一个上升沿计数器的值就加1,计数器最高可加到65535(16位),再加的话,计数器就会回到0重新开始,所以计数器的值在计时过程中会不断地自增运行,当自增运行到目标值时,产生中断,那就完成了定时的任务。就是存储目标值的寄存器,存我们写入的计数目标,当计数值等于自动重装值时,计时时间到了,自动重装寄存器就会产生一个中断信号并且清零计数器,计数器自动开始下一次的计数计时。对于通用计时器而言,时钟源不仅可以选择内部的72MHz时钟,还可以选择外部时钟。
江科大stm32学习笔记——【5-2】对射式红外传感器计次&旋转编码计次 1.旋转无反应,调试发现因为有的面包板中间不相连,所以要用跳线相连。2.旋转太慢时记不上数,最后在中断代码那里加了一个if语句防抖。一.对射式红外传感器计次。
江科大stm32学习笔记——【5-1】EXIT外部中断 用来测量位置,速度或旋转方向的装置,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向。中断嵌套:当一个中断程序 正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而处理新的中断程序,处理完后依次进行返回。中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。支持的触发方式:上升沿,下降沿,双边沿(上升沿和下降沿都可以触发中断),软件触发。
江科大stm32学习笔记——【4-1】OLED Keil调试模式:借助Keil软件的调试模式,可使用单步运行,设置断点,查看寄存器及变量等功能。劣势:调试的时候要拖着电脑。只能以信息流的方式呈现数据。串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息。劣势:屏幕太小,显示界面有限。串口调试的优势:不仅可以显示单独的参数,还可以显示曲线,图形,图像等。显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上。显示屏调试的优势:对于不断变化的数据可以覆盖刷新显示。前面的数字参数是定位,eg.第2行第1列。
江科大stm32学习笔记——【3-3】GPIO输入:按键控制led&光敏传感器控制蜂鸣器 当按键松手时,PA0被悬空,引脚电压不确定,所以必须要求PA0是上拉输入的模式,否则会出现引脚电压不确定的情况,这样引脚再悬空,PA0就是高电平。图一:当按键按下时,PA0被直接下拉到GND,此时读取PA0口的电压就是低电平。当按键松手时,引脚由于上拉作用,自然保持高电平。当按键按下时,引脚直接接到GND。传感器元件的电阻会随外界模拟量的变化而变化,通过。蜂鸣器的光敏传感器的驱动程序(和LED类似)上面两个是下接按键,下面两个是上接按键。三.光敏传感器控制蜂鸣器。一般用下接按键的方式。
江科大stm32学习笔记——【3-2】GPIO输出:LED闪烁&LED流水灯&蜂鸣器 以下所有库函数从gpio.h文件最下方查找,参数也是对函数定义查找后自己填写。跳线连接单片机3.3和面包板正极,连接单片机GND和面包板负极。(也可以LED负极连面包板负极,LED正极连接单片机A0口)LED灯正极连接面包板电源正极,LED负极连接单片机A0口。2.使用GPIO_Init函数初始化GPIO。开漏输出的模式高电平没有驱动能力。延时函数要加头文件注明。
C语言进阶(一)动态分配内存 头文件:stdlib.h string.h一.申请动态分配内存malloc中定义函数,向系统申请大小为的内存空间。返回结果是,使用时转换成需要的指针类型。如果申请失败,返回。二.释放动态分配内存free()三.初始化动态分配内存calloc在Linux中malloc和calloc都会分配近似于四.重新调整内存大小realloc...
C语言初阶(九)枚举 一.常量符号化1.const2.#define3.枚举 作用域二.枚举1.是什么枚举是一种用户定义的数据类型,枚举可以看作是一组宏定义。2.怎么用枚举大括号里面的名字是常量符号,类型为int,值依次从到。枚举就是给这些常量值,规定一个名字。 声明枚举时可以指定值也可以其中一个值,后续值依次加1...
C语言初阶(八)联合体 一.定义联合体是成员共用内存空间。二.作用1.在不同时刻把不同东西存在同一个位置时可以使用联合体例:声明了一个结构体和一个联合体,联合体内部包含了一个结构体和一个无符号整形数据(32位的)定义三原色分别为0X11、0X22、0X33,然后不再做任何处理,直接打印value 输出:CC332211先对value赋值,然后再输出R、G、B值 输出:56 \t 34 \t 12三.初始化联合变量可以被初始化,但这个初始值必须是联合的第一个成员的类型,而且它必须位于一对花括号内。...
C语言初阶(七)结构体 一.结构体操作1.取地址结构体名不是结构体变量的地址,必须使用获取地址。数组名即地址。2.传参 整个结构体作为参数的值传入函数。这时候在函数内新建一个结构体变量并复制值。结构体可以作为返回值,也是结构体整体复制。二.结构体指针 1.结构体指针访问成员 通过修改结构体指针指向的成员,也会改变结构体变量成员的值。2.结构体指针作为参数 三.结构数组四.结构体嵌套结构体含有结构体数组:...
C语言初阶(六)函数 一.函数原型函数头以结尾,构成函数原型。函数原型通常放在头文件里面或者调用它的函数的前面。提前告诉编译器使用的函数基本信息(名称、参数个数类型、返回类型)。通常把放在代码最前面便于阅读,但是这样会导致编译时因为找不到内部调用函数而错误或警告。在前加上函数原型可以解决这类问题,称为函数前置声明。二.指针与函数 1.函数名 函数名与数组名一样表示的是地址,不同的是函数名是执行函数代码的起始位置,数组是数组第一个元素的地址。 2.函数指针 函数指针是指向函数的指针变量,即本质是一个指针变量。 例:实现
C语言初阶(五)指针 23一.指针运算1.算术运算①+,-指针与整数相加:表示指针指向下个变量。指针与整数相减:表示指针指向上个变量。 指针与指针相减:两个指针的元素间隔个数。②自增自减++,-- *p++/*p-- --> *(p++)*++p/*--p --> *(++p)++*p --> ++(*p)2.比较运算、、、、、本质是比较内存中的地址。 二.指针类型 指向不同类型的指针不能直接相互赋值(特例),需要强制类型转换。 类型的指针是一种很特别的指针,表示指向未知类型的指针,并不指定它是指向哪一种类型的
C语言初阶(四)进制 一.进制常量表示C语言不能直接表示二进制常量。八进制数字以开头,十六进制数字以或开头。 二.输入 输出 十六进制数字的表示用到了英文字母,有大小写之分,要在格式控制符中体现出来:区分不同进制数字的一个简单办法就是,在输出时带上特定的前缀。在格式控制符中加上即可输出前缀...
链表(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...
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为真时
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..
STL算法总结 构成头文件 功能 <algorithm> 算法函数 <numeric> 数值算法 <functional> 函数对象/仿函数 分类No. 分类 说明 1 非可变序列算法 Non-modifying sequence operations 不直接修改容器内容的算法。 2 可变序列算法 Modifying sequence operations 可以修改容器内容的算法。