STM32(c语言基础)

1.硬件部分:按键,传感器

传感器模块:光敏电阻,热敏电阻,红外接收管

光敏电阻:光线越强,光敏电阻的阻值就越小;

热敏电阻:温度越高,热敏电阻的阻值越小;

红外接收管:红外光线越强,红外接收管的阻值越小;

注意:电阻的变化不容易直接被观察,通常将传感器元件和定值电阻串联,进行分压,从而得到模拟电压的输出!!!再通过电压比较器(运算放大器)进行二值化即可得到数字电压

(一般我们遇见一端接电路,一端接地,都可以考虑是不是滤波电容)

第三个:AO点电压变化,分压思想和上拉下拉思想

上拉下拉:当N1阻值为0,强下拉,AO电压会直接被拉到0V;N1阻值变大,下拉作用会减弱,中间引脚由于R1的上拉作用电压会升高;N1阻值无穷大,相当于断路,输出电压被拉到VCC(不计R1的阻值)

AO输出端:想象成放在屋子里的水平杆子,R1上拉电阻相当于有一个弹簧将杆子往上拉,N1下拉电阻相当于栓在地面的弹簧,将AO杆子向下拉;电阻阻值越小,弹簧拉力越强;

强上拉,强下拉;弱上拉,弱下拉:指弹簧力的大小(也就是电阻的阻值大小)

(压降!!!)

逐次逼近AD 转换器!!!

LM393就是电压比较器,两个电压比较器(运放)

IN+接AO,IN-接电位器(拧电位器,可改变阈值)进行比较,最后输出DO

注意:对于对射式红外传感器,N1就是红外接收管,会多一个点亮红外发射管的电路;(模拟电压是表示接收到的光强度(会避免自然红外光的干扰))此处的电位器是两个电阻进行分压,阈值一定

反射式红外传感器:向下发射红外光,接收反射光强,制作寻迹小车!!!

下图为开漏输出模式,在按下按键低电平,接通;松手时候引脚悬空,断开(需要引脚PA0里面再接一个弱上拉(上拉输入VDD接通),保证引脚的稳定性,阻值要大,防止对输入的影响)引脚悬空,此时是高电平。

下图,默认是弱上拉高电平模式;按下按键是强下来拉到GND,变为低电平,接通;

可以上拉输入或者浮空状态输入

PA0内部再弱上拉(上拉输入),此时上拉作用会强,再按下会强制拉到GND低电平,损耗较大

所以选择悬空模式,两个都不接通

二.c语言基础

右边是c语言stdint.h文件和ST对这些变量的重命名(typedef)

原因:左边名字比较长,而且int的位数(字节大小)根据操作系统的不同还有可能不一样,(int对于32位操作系统是4字节,64位操作系统是8字节),还有就是有时候名字和存储内容不一样,比如char关键字,是存储字符型数据,但是我们经常拿来存放整数而不是字符。

typedef:给变量类型换名字,重命名;即使用原来名字和此别名有一样效果

typedef unsigned char uint8_t;

引用typedef:

uint8_t a; // 等效于 unsigned char a;

宏定义和typedef的区别:1.宏定义不需要分号,typedef后面必须加分号;2.宏定义任何名字都可以换(一般将数字换成字符串进行替换,明显),typedef只能专门给变量类型换名字;宏定义改名范围更宽,typedef给变量类型命名更加安全,会检查变量类型是否正确。宏定义不会进行检查字符串名字;

数据类型:结构体,枚举,int,char等等

结构体:数据打包,不同数据类型变量的集合

关键字:struct

用途:数据打包,不同类型变量的集合

定义结构体变量:

struct

{

char x;

int y;

float z;

} StructName;

结构体名字可以放在最后,或者关键字旁边

struct StructName

{

char x;

int y;

float z;

};

因为结构体变量类型较长,所以通常用typedef更改变量类型名

引用结构体成员: StructName.x = 'A'; StructName.y = 66; StructName.z = 1.23;

pStructName->x = 'A'; //pStructName为结构体的地址

pStructName->y = 66;

pStructName->z = 1.23;

注意:链表中,存储的地址,就是下个节点的地址,和存储地址单元 是一个东西!!!!

关键字:enum

用途:定义一个取值受限制的整型变量,用于限制变量取值范围;

宏定义的集合

定义枚举变量: enum{FALSE = 0, TRUE = 1} EnumName;

因为枚举变量类型较长,所以通常用typedef更改变量类型名

引用枚举成员: EnumName = FALSE; EnumName = TRUE;

注意:枚举的值也可以赋值给别的变量;枚举只能赋值字符串,直接赋值会警告

相关推荐
wenchm35 分钟前
细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的另一种方法
stm32·单片机·嵌入式硬件
茶猫_1 小时前
力扣面试题 - 25 二进制数转字符串
c语言·算法·leetcode·职场和发展
电子工程师UP学堂2 小时前
电子应用设计方案-16:智能闹钟系统方案设计
单片机·嵌入式硬件
ö Constancy2 小时前
Linux 使用gdb调试core文件
linux·c语言·vim
lb36363636362 小时前
介绍一下strncmp(c基础)
c语言·知识点
wellnw2 小时前
[linux] linux c实现共享内存读写操作
linux·c语言
飞凌嵌入式2 小时前
飞凌嵌入式T113-i开发板RISC-V核的实时应用方案
人工智能·嵌入式硬件·嵌入式·risc-v·飞凌嵌入式
blessing。。4 小时前
I2C学习
linux·单片机·嵌入式硬件·嵌入式
嵌新程5 小时前
day03(单片机高级)RTOS
stm32·单片机·嵌入式硬件·freertos·rtos·u575
珹洺5 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode