一 回忆昨天的内容
按键驱动程序 GPIO
button_init
button_status
按键是GPIO的输入功能
输入相当于检测
定时器
超时时间 频率 计数值
计数范围 0~16M-1
透明
USB驱动
二 位带
2.1 bitband
C语言回顾:
1.指针
int a;
a = 100;
(&a) = 100;
*( (int *) 0x1000000 ) = 200;
地址 (volatile int *) 0x10000000;
访问 *(volatile int *)0x10000000;
2.位操作
//不行 影响其他的位
*(volatile int *) 0x1000000 =0x01000000;//bit 24位置1
//bit 25位置0
//正确做法
*(volatile int *) 0x10000000 &= 0xfcffffff;//1100
*(volatile int *) 0x10000000 |= 0x01000000;//0001
//标准做法
* (volatile int *) 0x10000000 &= ~( 3 << 24 );
* (volatile int *) 0x10000000 |= 1<< 24;
例如:想要将0x12345678 这个地址的第9位置1,第10~12位置0
* (volatile int *) 0x12345678 |= 1 << 9;
* (volatile int *)0x12345678 &=~ ( 7 << 10);
3.结构体 联合 与 枚举
struct Student{
unsigned int x : 1;
unsigned int y : 2;
unsigned int z : 3;
};结构体中成员变量冒号后的数字代表该成员变量管理的位数
union Unit {
char c;
struct Student s;
};
union Unit u;
u.c=13;//0 0 0 0 1 1 0 1
printf("%d\n",u.s.x);// 1
printf("%d\n",u.s.y);// 2
printf("%d\n",u.s.z);// 1
位域
struct GPIOA
{
unsigned int PA1 :2;
unsigned int PA2 :2;
.....
unsigned int PA15 :2;
};
typedef enum{
OUTPUT = 0x100;
INPUT ;
AF ;
AIN ;
};
struct GPIOA a;
a.PA9 = OUTPUT;
a.PA0 = INPUT;
《权威指南.pdf》p84
内存的总容量 4G
片上的SRAM 512M
片上的外设 512M
位带区 0x20000002 bit4 位 对应的位带别名区的地址是什么?
0x2200004c
#define BITBAND (addr,bitnum)
(addr &0xf0000000) +0x20000000 + (( addr & 0xfffff )<<5 +BITNUM <<2)
#define MEMADDR (addr)
*(volatile int *) (addr)
//通过上述宏可以将16进制的数转换成地址使用
#define BIT_BAND (addr,bitnum)
MEMADDR(BITBAND(addr,bitnum))
位带操作多用于低端芯片
位域操作多用于高端芯片
2.2 内存管理
进程 :进程是程序运行的实例
Linux
每个进程都有自己独立的4G内存空间
参见图 内存管理
三 串口
3.1 有线通信及无线通信
有线通信
串口:
RS232:电气特性
逻辑0: +3V ~ +15V
逻辑1: -3V ~ -15V
传输距离:< 10m
RS485:电气特性
工业级串口 工控领域中用的多
采用差分信号 传输的时候,用两根线。
TTL 电平
低电平 < 0.8V
高电平 > 2.4V
以太网 4层
M-BUS 远程抄表
PLC 电力线通信
无线通信:
短距无线通信:
蓝牙
WIFI
红外
ZigBee
Nrf
长距无线通信:
2G 3G 4G 5G 6G
移动蜂窝网络
低功耗的局域网络
Lora
NB-IOT (窄带物联网)
3.2 串行通信
串行接口简称串口
板子链接上PC上之后,右键计算机--》 管理 --》 设备管理器 --》端口 (com口)
串口的工作模式:
单工:任何时候数据只能朝一个方向传输
半双工:数据可以双向传输,但是任何一个时刻只能朝一个方向。
全双工:数据可以同时朝两个方向传输。