物联网实训_Day01~Day06

Day01        基本知识前提

struct node {

   int data;

   struct node next;   //错误,结构大小不确定

   struct node *next;

}

环境搭建

typedef 起别名

数组 typedef int arr_t [3];

arr_t b[2];  arr_t 相当于 int [3];

嵌入式以应用为中心

---------------------------------------------------------------------------------------------------------------------------------

Day02

ST ARM STM

三星 ARM 开发板+外设

联想 Intel

BIOS 基本输入输出系统

C语言执行效率高

提问:

  1. 和CPU连接的各种bus有什么?

三种:数据总线,地址总线,控制总线

区分冯诺依曼体系和哈佛体系:看取数据和取指令是否用的同一根总线

  1. stm32中有几个总线,分别是谁

AHB,AHB1,AHB2,APB1,APB2

     2.要操作GPIO外设,要通过哪个总线操作?

APB2总线打开时钟

一个管脚最多有四个功能

输入:上拉(默认高电平)、下拉(默认低电平)、浮空(默认不确定)

输出:开漏(只能低不能高)、推挽(高低都行)

复用:

模拟:模拟输入(ADC)

编译原理

源程序  --> 预处理文件 --> 汇编文件 --> 目标文件 --> 可执行文件(ELF)

hello.c   -->  hello.i  ----->  hello.s  --->hello.o  ----->a.out

               预处理        编译               汇编            连接

预处理:

根据预处理指令,过滤掉程序的注释,把相关的头文件包含进来,预处理指令 是给预处理器下发的执行

gcc -E hello.c -o hello.i

编译:

将预处理后的文件编为汇编文件

gcc -S hello.i -o hello.s

汇编:hello.s 汇编成目标文件

gcc -o hello.s -o hello.o

链接:将目标文件和库文件,运行文件链接生成可执行文件

gcc hello.o

---------------------------------------------------------------------------------------------------------------------------------

Day03

extern 关键字 扩充变量或者函数的作用域

输入相当于检测,输出相当于控制

初始化GPIO

  1. 选择推挽输出
  2. 选择C组123
  3. 输出频率50MHz

按键对应的管脚

KEY0 --> PC9

KEY1 --> PC8

KEY2 --> PA0

KEY0,KEY1默认高,KEY2默认低

轮询、中断、DMA

定时器:

volatile 易变

告诉编译器在取变量值的时候每次都去内存中取,不要到缓存中取

普通定时器和特殊定时器(wdg ,RTC)

看门狗除了定时,还能重启复位

到达定时时间自动重启

RTC:提供计时功能 年 月 日 时 分 秒

决定定时时间(超时)有哪些因素:频率,计数值

系统定时器:

不是ST公司提供的,是ARM提供的

系统定时器(system timer | systick)

从频率和计数值分析时间长短

提问:

  1. 有几种时钟源

HSI、HSE、LSI、LSE、PLL倍频(乘法器)。

     2.系统时钟是由谁提供的

HSE:内部时钟源往往不稳定,所以选择HSE

通过时钟树,分析定时器的时钟频率SYSCLK / 8或SYSCLK

     3.查找系统定时器的计数范围:0-2^24-1(16M)

USB hub root hub  <-- USB Bus

        usb2.0/3.0  connect <-- Usb Device

        EHCI/XHCI

        End point <-- 发命令 <-- Mass Storage

---------------------------------------------------------------------------------------------------------------------------------

Day04

位带:bitbandf

*((int *) 0x10000000) = 200;

地址:(volatile int *) 0x10000000

访问:*(volatile int *) 0x10000000

位操作:

一般做法:

*(volatile int *) 0x10000000 &= 0xfcffffff;

*(volatile int *) 0x10000000 |= 0x01000000;

标准做法

*(volatile int *) 0x10000000 &= ~(3<<24);

*(volatile int *) 0x10000000 |= ~(1<<24);

结构体、联合、与枚举

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;

权威指南p86

内存总容量 4G

片内SRAM 512M

片上外设 512M

#define BITBAND (addr,bitnum)

(addr &0xf0000000) + 0x20000000+

((addr & 0xfffff) << 5 + BITBAND << 2)

#define MEMADDR (addr)

*(violatile int *) (addr)

//将十六进制转化成地址使用

typedef enum{

   OUTPUT;

   INPUT;

   AF;

   AIN;

}

位带多用于低端产品

位域多用于高端产品

---------------------------------------------------------------------------------------------------------------------------------

Day05

2.2内存管理

   进程:程序运行的实例

   每个进程都有自己独立的4G内存空间

   参见内存管理图

三 串口

   有线通信:

   RS232:电气特性

     逻辑0:+3V~+15v

     逻辑1:-3V~-15v

     传输距离 < 10m

   RS485:电气特性

     工业级串口 工控领域用的多

     采用差分信号 传输的时候,用两根线

     TTL电平

     低电平:< 0.8v

     高电平:> 2.4v

以太网   4层

M-BUS 远程抄表系统

PLC  电力线通信

无线通信:

短距离:蓝牙,WiFi,红外,zigbee,Nrf

   长距离:移动蜂窝网络,23456G

低功耗局域网:Lora,NB-Iot(窄带物联网)

3.2串行通信

   串行接口简称串口

   工作模式:单工,半双工,全双工

   单工:确定高位先出还是低位先出,空闲时拉高。

0x9b,串口发送,传送时需同

---------------------------------------------------------------------------------------------------------------------------------

DAY06

一 回忆昨天的内容
    
    串行通信  
    115200
    8N1


    
  串行通信与并行通信的区别
  
  USART 
  同步和异步
  
  时序  
  
  usart1_send_byte 
  
  while (*buf) {
      usart1_send_byte ---》 usart1_send_data
  }
  
  usart1_recv_byte
  
二 中断 
     目标:把之前检测按键功能由轮询的方式改为中断
     
     2.0 中断控制器
         当使用中断时,首先中断控制器
         NVIC 可嵌套的向量中断控制器
         VIC  向量中断控制器
         GIC  通用中断控制器  ----》 高端板子
         
         一般情况下MCU 使用NVIC和VIC

 


         
     2.1 在STM32F102RBT6中的中断
         NVIC和ARM-CORTEX-M3紧密相连
         NVIC会处理两个事情
         1) NVIC会为每一个连接到NVIC上的中断源分配一个中断号
          中断号的顺序一定和中断向量(异常处理函数)保持一致
          
         2) 处理优先级的问题
         本身ARM 提供8bit的寄存器来解决256个优先级
         但是ST公司只用了4bit 用于处理16个优先级
         
         2.2 通过手册了解EXTI中断
         打开《stm32f10x中文参考手册》P91
         8.1.2章节中所指示的是中断和异常向量表
         编号越小的(中断),优先级越高
         
         表36中所指示的内容是不可以修改的
         首先关注EXTI,它表示外部中断,可以配置成19个中断事件源
         16个用来处理外部中断,剩余的3个用来处理其他外部中断
         
         GPIO管脚可以触发中断,但是需要借助EXTI,一共有19个
         
         PA0 PB0 PC0 PD0 ...都可以触发EXTI0
         ...
         PA5 PB15 PC15 PD15 ...都可以触发EXTI15
         
         结论:每一个GPIOx 都可以触发EXTIx
         
         注意: 
             1) NVIC 和EXTI的区别
                 NVIC 控制器
                 EXTI 外部中断源
                 
             2) 编号的问题
                 中断有中断号
                     中断号和异常向量表中的顺序有关
                 外部中断也有外部中断号
                     EXTI的中断号和GPIO的管脚相关
                     
             3) 外部中断 EXTI0 对应的中断编号 0..
                     外部中断 EXTI9~5 对应的中断编号是同一个
                     有些外部中断独占一个中断号
                     有些外部中断共享一个中断号
                     也就是说,异常向量表中的第6个函数是处理外部中断0
                     由于KEY0 对应的PC9 KEY1 对应的是PC8
                     且EXTI9~5对应的中断处理函数是同一个,
                     所以要在中断处理函数中进行判断
                     
         2.2 了解外部中断配置寄存器
             EXTIx[3:0] 配置成不同的值的时候,选择不同的管脚
             它属于AFIO_EXTICR1,所以打开时钟的时候,
             需要将GPIOA,GPIOC,AFIO的时钟打开
             
         2.3 驱动EXTI(外部中断)
             KEY0    PC9     EXTI9
             KEY1    PC8     EXTI8
             KEY2    PA0     EXTI0
             KEY0 和 KEY1 在没有按下的时候,呈现高电平。
             KEY2 逻辑和上述相反。
             
         
         用中断的方式实现USART1接受字符串
         

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值