基于Arm的嵌入式裸板开发
2017-12-22 11:48:04 6 举报
AI智能生成
基于Arm的嵌入式开发
作者其他创作
大纲/内容
基础概念
上位机
电脑
下位机
开发板
GPIO(General Purpose Input Output,通用输入/输出)
串行总线
UART(Universival Asychronous Receiver/Transmiter)
通用异步串行收发器
USB(Universal Serial Bus)
I2C(Inter-Integrated Circuit)
两线式串行总线
时钟线
CPU控制
低放高取
数据线
数据发送方控制
总线协议
Start信号/起始信号
只能CPU发出
SCL高,SDA发送falling edge
Stop信号/结束信号
只能CPU发出
SCL高,SDA发送Raising edge
地址信号,设备地址<<1|读写位
读写位
CPU读=1
设备地址7位
区分设备
芯片手册和原理图决定
ACK信号/应答信号
低电平有效
SPI(Serial Peripheral Interface)
1-WIRE BUS
外设
Led灯
每个Led灯连接一条GPIO线,通过设置GPIO电平控制
初始化
将Led灯的控制线的对应管脚的功能进行切换,切换为GPIO功能
配置该GPIO管脚的输出使能
设置管脚电平,控制Led灯
UART
通信原理
全双工
可以同时双向通信
每端3根线
数据线
发送线(TX)
接对方RX
接收线(RX)
接对方TX
地线
接对方地线
统一数据线电平
数据同步机制
异步
没有统一的时钟
数据传输速率
波特率
每秒传输比特数
设置
Uart时钟
Uart时钟相关寄存器
波特率相关寄存器
按照此恒定速率同步
停止位
无数据传输时,数据线上的逻辑位
校验位之后是停止位,若无校验位,最后一个数据位后是停止位
起始位
将要数据传输时,数据线上的逻辑位
下一位开始为数据位
TTL电平
Uart对内的电平
逻辑0=0~0.8V
逻辑1=1.4~3.3V
EIA电平
Uart对外的电平
逻辑1=-15~-3V
逻辑0=3~15V
串口转换芯片(例如SP3232E)
TTL和EIA电平之间转换
缓存发送/接收数据
FIFO机制
单个数据
位数可选
5,6,7,8
校验
奇偶校验
奇
偶
不校验
使用模式
轮询、DMA、中断
G-sensor(MMA8653)
I2C总线读取G-sensor信息
设备地址
0x1D
运行裸板程序
程序编写
管脚控制
每个管脚对应一个寄存器,C指针访问寄存器地址
封装地址
(*(unsigned long*)(0x12345678))
p=(unsigned long*)(0x12345678)
读
xxx=*p
写
*p=xxx
按位写0
(*p)=(*p)&~(1<<(位数))
按位写1
(*p)=(*p)|(1<<(位数))
程序生成
工具链
编译,链接,生成
交叉编译
在A平台编译出B平台运行的程序
交叉编译器
找开发板提供商要
包含xxx-gcc,xxx-ld,xxx-objcopy等
编译
完整命令
xxx-gcc -nostdlib -nostartfiles -e main -o xxx.o xxx.c
参数
-nostartfiles
不生成start函数来调用入口函数
-nostdlib
不使用标准库
-e main
指定程序入口
好像不要也可以
-o xxx.o
指定输出文件
xxx.c
指定输入文件,即待编译文件,可多个,空格隔开
链接
完整命令
xxx-ld -nostdlib -Ttext 0x48000000 -o xxx.elf xxx.o
参数
-nostdlib
同编译
-Ttext 0x48000000
指定代码段地址
-o xxx.elf
输出文件
xxx.o
输入文件,即待链接文件,可多个,空格隔开
脱壳
完整命令
xxx-objcopy -O binary xxx.elf xxx.bin
参数
-O binary
指定输出文件类型为二进制文件
xxx.elf
copy源文件,即待脱壳文件
xxx.bin
copy目的文件,可加载到内存运行
程序运行
下载/烧录
用tftp软件搭建服务器
windows
设置
选文件夹,对服务对象来说是当前文件夹,把脱壳的.bin文件放在这里
选本机IP
linux
略
串口连接开发板
上位机通过串口线与下位机相连
上位机设置
波特率=1152000
bit=8位
不校验
其他选项不选
将uboot烧录到TF卡中,插入开发板SD0槽
默认流程是先运行SD0中烧录的程序
重启开发板,在倒数计时结束前按任意键,进入命令行
开发板环境设置
ipaddr
setenv ipaddr xxx.xxx.xxx.xxx
要与tftp地址同一网段
serverip
setenv serverip xxx.xxx.xxx.xxx
tftp服务器地址
save
保存环境变量到闪存
printenv
查看所有环境变量
烧录
完整命令
tftp 0x48000000 xxx.bin
将bin文件加载到特定内存地址
参数
tftp
访问tft目录
48000000
内存地址
xxx.bin
烧录的文件
运行
完整命令
go 48000000
参数
go
运行
48000000
CPU执行程序的起始地址
0 条评论
下一页