嵌入式控制技术与系统报告综述.docx
- 文档编号:11293763
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:15
- 大小:59.18KB
嵌入式控制技术与系统报告综述.docx
《嵌入式控制技术与系统报告综述.docx》由会员分享,可在线阅读,更多相关《嵌入式控制技术与系统报告综述.docx(15页珍藏版)》请在冰豆网上搜索。
嵌入式控制技术与系统报告综述
一,设计要求
⑭
⑬
图1RB-STM32F103开发板王要资源
本设计主要通过串口对LED灯的开闭和闪烁频率进行控制。
串口发送相关命令字符串,stm32接收到字符串后返回相应的字符串,同时LED灯的开闭状态和闪烁频率根据收到的命令进行相应的变化。
二,开发板简介
本设计利用stm单片机型号是stm32f103zet6,其基本参数为:
1-27分别为
CPUSTM32F103ZET6ARMCortex-M3内核,512kBFlash,64KBRAMLQFP144脚圭寸装
32位RISC性能处理器
32位ARMCortex-M3结构优化
72MHz运行频率/90MIPS(1.25DMIPS/MHz)
硬件除法和单周期乘法
快速可嵌套中断,6~12个时钟周期
具有MPI保护设定访问规则
1MBit*2的SRA(ISSI)
128M字节NADNFlash(SAMSUNG
16M字节NORFlash(SPANSION
100M/10M自适应以太网接口(DM9000A,IEEE802.3X流量控制的全双工模式,16KBSRAM支持IP/TCP/UDP校验生成和检查,可从EEPRO自动加载供应商ID和产品标识等优点
16MbitSPI串行Flash(SST25VF016)B
板载VS1003B高性能MP3军码芯片,支持解码音乐格式包括MP3WMAWAVMIDI、P-MIIDI,录音编码格式IMAADPCM单声道)。
麦克风和线入(Lineinput)两种输入方式;支持MP和口WAV流低功耗;具有内部锁相环时钟倍频器;高质量的立体声数模转换器(DAC;16位可调片内模数转换器(ADC;高质量的立体声耳塞驱动(30欧);单独的模拟、数字和IO供电电源;串行的数据和控制接口(SPI);
外置扬声器,3.5mm接口立体声耳机插座
可调电位器,输入模拟信号
一个5向摇杆,一个Reset按钮、一个wakeup按钮、一个Tamper按键,一个自定义按钮
电压表输入接口
BNC输入端子,集成双通道CH1CH示波器电路
4个自定义LED
RS23串行通信接口(DB9)
MicroSD卡插槽(SD模式,不含SD卡),提供文件系统(FATFS
标准ARMJTAG20PIN仿真接口座(方便连接ST-LINK,JLINK,ULINK2等仿真器)
USBHOST接口,嵌入式的主/从设备控制器(SL811HS,可以全速或低速与USB设备通信。
LCD插槽,支持3.5寸320*240大屏幕26万色TFT-LCD模块,支持8/16位总线接口,镜面屏,超高清度,FSM(控制,还配备了ADS784触摸控制器
外接2KIIC接口EEPROM24LC02
RS48串行通信芯片(SP3485
CAN2.0A/B通信芯片(SN65VHD230
CAN2.0A/B通信接口,RS48串行通信接口
8M外部石英晶振
32.768KHZ石英晶振,提供RTC时钟
BOO选择位,采用开关模式,让用户使用更方便
74HC13地址解码器
USB2.0全速DEVICE接口
本开发板上固定有一个LED灯,其与控制芯片连接的引脚固化为端口G的引脚
15。
固化的开发板串口为串口1,由stm32的引脚图可知,串口1的固定引脚为:
PA9(Tx)和PA10(Rx)。
编程方式选用的是ST官方提供的库函数,精确延时函数为利用SysTick中断编写的毫秒级延时。
三,设计内容
LED灯开闭命令,其命令分别为“开启”和“关闭”。
当电脑向stm32发出“开始”字符串后,电脑显示“LED灯的状态为:
开启”,同时LED灯开始闪烁。
当电脑向stm32发出“关闭”字符串后,电脑显示“LED灯的状态为:
关闭”,同时LED熄灭。
LED灯闪烁频率命令,其命令分别为“频率”、“完成”、“1”、“2”、“3”、其操作过程为:
在LED处于关闭的状态下,电脑发出“频率”命令,stm32接受到命令后向电脑回复相应字符串,电脑收到并显示显示“LED灯的频率为:
”,此时进入LED灯闪烁频率设定程序。
在进入频率设定程序后,可设定LED的闪烁频率,本设计共
设定了3中LED闪烁频率,分别用代号1-3表示,其值分别为5Hz、2.5Hz、1Hz,输入相应频率代号后发送给stm32,此时电脑收到并显示相应的LED闪烁频率值。
最后向stm32发送“完成”命令,电脑会收到并显示字符串“频率设置完成”,此时LED
频率设置完成,输入“开启”命令,LED就会根据设定的频率闪烁。
stm32时钟配置命令。
向stm32发送“时钟配置”命令,stm32会返回其各个时钟的频率值。
本设计中所涉及的几种寄存器介绍及在使用中的介绍:
端口配置高寄存器(GPIOx_CR)
偏移地址:
04h
复位值:
44444444h
31302928272625242322212019
181716
CNF
MOD
CNF
MOD
CNF
MOD
CNF
「MOD
15[1:
0]
E15[1:
0
14[1:
0]
E14[1:
0
13[1:
0]
E13[1:
0
12[1:
0]
E12[1:
0
]
]
]
]
rwrwrwrwrwrwrwrwrwrwrwrwrw
rwrwrw
1514131211109876543
210
CN
MO
CN
MO
CN
MO
CN
MO
F11[1:
DE11[1
F10[1:
DE10[1
F9[1:
0
DE9[1:
F8[1:
0
DE8[1:
0]
:
0]
0]
:
0]
]
0]
]
0]
rwrwrwrwrwrwrwrwrwrwrwrwrw
rwrwrw
位31:
30,27:
26,23:
22,19:
18,15:
14,11:
10,7:
6,3:
2的功能为:
CNFx[10]端口x配置位在输入模式(MODE[1:
0]=00):
00:
模拟输入模式
01:
浮空输入模式(复位后的状态)
10:
上拉/下拉输入模式
11:
保留
在输出模式(MODE[1:
0]>00):
00:
通用推挽输出模式
01:
通用开漏输出模式
10:
复用功能推挽输出模式
11:
复用功能开漏输出模式
位9:
28,25:
24,21:
20,17:
16,
13:
12,9:
8,5:
4,1:
0的功能为:
MODEx[1:
0]端口x的模式位(x=0…7)
00:
输入模式(复位后的状态)
01:
输出模式,最大速度10MHz
10:
输出模式,最大速度2MHz
11:
输出模式,最大速度50MHz
在本设计中主要涉及到三个引脚GA9GA1和GP15其配置分别为:
GPIOA_CRH=0x04090h
GPIOG_CRH=0x030000000h
APB2外设复位寄存器(RCC_APB2RSTR)
偏移地址:
0Ch
复位值:
00000000h
31
30
29
閒
27
2423
22
21
20
19用
17
If)
15
14
13
12
11
10
9
87
6
5
4
3
2
1
0
保留
LSARTL
保留
SPU
T1M1
ADC2
AIK1
[OFF
]OPD
TOPC
roPB
10PA
AFIO
KST
RST
RST
RST
RST
KST
RST
RST
RS7
BST
RST
fw
rw
rw
rw
rw
rw
rw
rw
rw
rw
位31:
15保留,始终读为0
位14
0
1位13位12
0
1
位11
0
1
位10
O
USART1RST:
USART1复位由软件置1或清零
:
无效
:
复位USART1
保留,始终读为0。
SPI1RST:
SPI1复位由软件置1或清零
:
无效
:
复位SPI1
TIM1RST:
TIM1复位
由软件置1或清零:
无效
:
复位TIM1
ADC2RST:
ADC复位由软件置1或清零
:
无效
:
复位ADC2
由软件置1或清零
:
无效
:
复位10口E
0
1
位9ADC1RST:
ADC复位
由软件置1或清零
:
无效
:
复位ADC1
保留,始终读为0。
0
1
位5IOPDRST:
IO口D复位由软件置1或清零
0:
无效
1:
复位IO口D位4IOPCRST:
IO口C复位由软件置1或清零
0:
无效
1:
复位IO口C
位3IOPBRST:
IO口B复位由软件置1或清零
0:
无效
1:
复位IO口B位2IOPARST:
IO口A复位由软件置1或清零
:
无效
:
复位IO口A
保留,始终读为0。
0
1
位8:
7
位6IOPERST:
IO口E复位
本设计主要用到串口1,端口A和G,端口位设置/复位寄存器(GPIOx_BSRR)(x=A地址偏移:
10h
复位值:
00000000h
位0AFIORST:
辅助功能IO复位
由软件置1或清零
0:
无效
1:
复位辅助功能
RCCAPB2RSTR=0x4104h
E)
位31:
16BRx:
清除位x(x=0…15)
这些位只能写入并只能以字(16位)的形式操作。
0:
对对应的ODR)位不产生影响
1:
清除对应的ODR)位为0
注:
如果同时设置了BSx和BRx的对应位,BSx位起作用
位15:
0BRx:
设置位x(x=0…15)
这些位只能写入并只能以字(16位)的形式操作。
0:
对对应的ODR)位不产生影响
1:
设置对应的ODR)位为1
GP1置位时,该值为GPIOG_BSRR=Ox8OOOh
GP1复位时,该值为GPIOG_BSRR=Ox8OOOOOOOh
USAR波特率寄存器USARTx_BRR
每个串口都有一个自己独立的波特率寄存器USART_BRF通过设置该寄存器达
保留位.W1M制为0
□IV_Mantissa5ARIDIV的幣垃汎仃
文fUSAFET分杭掘赊法阿子(USARTDI蛙朋分.
(13;0
DlV_Fraction[3:
0]jUSARTD0的小駛沛甘
这4应卅史恥RT廿频格除法丙子(MARTDM册“徴部认
图2寄存器USART_BR各位描述
前面提到STM32勺分数波特率概念,其实就是在这个寄存器里面体现的。
最低4
位用来存放小数部分DIV_Fraction,[15:
4]这12位用来存放整数部分
DIVMantissa。
高16位未使用。
这里波特率的计算通过如下公式计算:
这里的fpclkx(x=1、2)是给外设的时钟(PCLK用于串口2、3、4、5,PCLK2用于串口1),USARTDI是一个无符号的定点数,它的值可以有串口的BRR寄存器
值得到。
而我们更关心的是如何从USARTDIV勺值得到USART_BR的值,因为一般我们知道的是波特率,和PCLKx的时钟,要求的就是USART_BR的值。
下面我们来介绍如何通过USARTDI得到串口USART_BR寄存器的值,假设我们的串口1要设置为9600的波特率,而PCLK2勺时钟为72M这样,我们根据上面的公式有:
USARTDIV=72000000/9600*16=468.75
那么得到:
DIV_Fraction=16*0.75=12=0X0C;DIV_Mantissa=468=0X1D4这样,我们就得到了USART1->BR的值为0X1D4C只要设置串口1的BRR寄存器值为0X1D4C就可以得到9600的波特率。
USAR状态寄存器(USARTx_SR)串口的状态可以通过状态寄存器USART_S读取。
USART_S的各位描述如下:
31
30
2928
27
26
25
24
23
22
21
2。
19
17
16
保册
13
14
1312
11
10
9
8
7
&
5
4
3
2
1
0
CTS
LBD
TXE
TC
RXXE
IDLE
CRE
NE
FE
PE
rc*0
re
r
rcwO
rcwO
r
r
r
图3寄存器USART_S各位描述
RXN(读数据寄存器非空),当该位被置1的时候,就是提示已经有数据被接收到了,并且可以读出来了。
这时候我们要做的就是尽快去读取USART_DR通过读USART_D可以将该位清零,也可以向该位写0,直接清除。
TC(发送完成),当该位被职位的时候,表示USART_D内的数据已经被发送完成了。
如果设置了这个位的中断,则会产生中断。
该位也有两种清零方式:
读USART_SR写USART_DR
四主程序流程图
初始化
否
是串口发送是
指令
关闭
LED灭
五程序清单
intmain(void)
{
RCC_Configuration();
GPIO_Configuration();//
NVIC_Configuration();//SysTick_Init();
USART_Configuration();//
//系统时钟初始化引脚初始化中断配置初始化
//系统定时器初始化串口初始化
",表示开启led
xx
"完成",表示频率设置完成
while
(1)
{
if(strcmp(RecOrder,"开启")==0)//假如命令字符串为"开启{
Delay_ms
(1);
SendString("LED灯的状态为:
\n开启\n");//输出字符串ResetString(RecOrder);//清空字符串
Num=0;//清计数
State=1;//将状态标志位置1,开启LED
}
elseif(strcmp(RecOrder,"程序
{
Delay_ms
(1);
SendString("LED灯的频率为:
\n");ResetString(RecOrder);//清空字符串
Num=0;//清计数while(strcmp(RecOrder,"完成")!
=0)//假如命令字符串为跳出频率设定程序片段
{if(strcmp(RecOrder,"1")==0)
{
Delay_ms
(1);SendString("5Hz\n");
ResetString(RecOrder);//清空字符串Num=0;//清计数
Jiange=100;
}
elseif(strcmp(RecOrder,"2")==0)
{
Delay_ms
(1);
SendString("2.5Hz\n");
ResetString(RecOrder);//清空字符串Num=0;//清计数Jiange=200;
}
elseif(strcmp(RecOrder,"3")==0)
Delay_ms
(1);SendString("1Hz\n");ResetString(RecOrder);//清空字符串
Num=0;//清计数Jiange=300;
}
}
Delay_ms
(1);
SendString("频率设置完成\n");
ResetString(RecOrder);//清空字符串
Num=0;//清计数
}
elseif(strcmp(RecOrder,"时钟配置")==0)//假如
{
Delay_ms
(1);
SendString("LED灯的时钟配置为:
\nSYSCLK(系统时钟)=72MHZ\nAHB总线时钟
=72MHZ\nAPB总线时钟=36MHZ\nAPB总线时钟=72MHZ\nPLL时钟=72MHZ\nPLL2时钟=40MHZ\n");
ResetString(RecOrder);//清空字符串
Num=0;//清计数
}
while(State)
{
if(strcmp(RecOrder,"关闭")==0)//假如命令字符串为N,表示开启led并进入设置状态
{Delay_ms
(1);SendString("LED灯的状态为:
\n关闭\n");
ResetString(RecOrder);//清空字符串
Num=0;//清计数
State=0;//将状态标志位置0,关闭LED
}
else
{
ResetString(RecOrder);//清空字符串
Num=0;//清计数
}
GPIO_SetBits(GPIOG,GPIO_Pin_15);
Delay_ms(Jiange);
GPIO_ResetBits(GPIOG,GPIO_Pin_15);
Delay_ms(Jiange);
}}}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 控制 技术 系统 报告 综述