嵌入式系统实验报告
Embedded System Experiment Report
所在学院:
信 息 学 院
所在班级:
学生姓名:
学
号:
指导教师:
教 务 处
2019 年 4 月
实验一 流水灯实验
一、实验目的
1、点亮一个 led
2、使 4 个 LED 灯循环流动,达到流水效果
3、了解掌握 STM32F407 GPIO 的使用。
二、实验原理
通过原理图去寻找对应的 LED 对应 STM32F407 的 GPIO。
本实验用到 3 个原理图(F 盘下嵌入式 20170228-M4):实验箱底板图、
FS-STM32-V3 核心板图、按键数码管板.Pdf(Arduino 里)。
D1 -A5(AD5)-PF10-17-PF10(STM32F407 核心板)-STM32F407 的 28 脚-PF10
按键数码管板图
实验箱底板图
2
核心板
通过底板图 CON50 的 17 脚找核心板 CON50 的 17 脚
D2 -A0(AD0)-PC0(标号)-20-PC0(STM32F407 核心板)-STM32F407 的 32 脚
-PC0(GPIO)
D3 -PWM/D5-PB15(标号)-16-PB15(STM32F407 核心板)-STM32F407 的 95 脚
-PB15(GPIO)
D4 -PWM/D3-PH15(标号)-40-PH15(STM32F407 核心板)-STM32F407 的 130
脚-PH15(GPIO)
其它 3 个同上。
三、实验内容
1、先点亮一个 led 灯。
2、点亮 4 个 LED 灯。
3、将 4 个 LED 灯,按照一定的规律进行循环显示,达到流水的效果。
四、主要源代码
Turn_On_LED()方法的作用是输入一个数,通过 switch 方法实现根据
输入的数字,控制 LED 灯的亮起和熄灭。
void Turn_On_LED(uint8_t LED_NUM)
{
switch(LED_NUM)
{
case 0:
HAL_GPIO_WritePin(GPIOH,GPIO_PIN_15,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOH,GPIO_PIN_15,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET);
3
break;
case 1:
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);
break;
case 2:
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET);
break;
case 3:
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOH,GPIO_PIN_15,GPIO_PIN_RESET);
break;
default:
break;
}
}
五、实验结果
先是第一个和第二个灯亮灭,然后第二个和第三个亮灭,第三个和第
四个亮灭,第四个和第一个亮灭然后开始按此循环。
实验二 串口实验
一、实验目的
串口的使用对于我们开发调试过程中的作用是非常之大,可以用来查
看,打印以及输入相关信息。所以对串口的调试使用要熟练掌握。
二、实验原理
1.打开实验箱底板图、FS-STM32-V3 核心板图,查找到串口对应的引
脚 PA10 PA9
4
底板图
将开关 SW7 拨到 DEBUG,即是将 PA10_3 与 PA10 连接,PA9_3 与 PA9 连接。
在 cubemx 当中,我们需要设置 USART1 Configuration:
设时钟同上
点击 ,其余同上。在下载程序后按核心板复位键。
2.从源程序中,找思路
(1)定位点 main 函数
(2)遇到 printf 函数
在 keil 当中,能使用 printf 这个函数需要一定的使用要求
int fputc(int ch, FILE *f) //
{
uint8_t tmp[1]={0}; //定义一个数组
tmp[0] = (uint8_t)ch; //将输入的数据变成 8 位数据
HAL_UART_Transmit(&huart1,tmp,1,10);
return ch;
//数据发送函数
}
在 options for Target
DEBUG 当中,选择 ST_LINK debuger
5
下载好程序后,需要查看端口号
在我的电脑-设备管理器当中,查找端口。
三、实验内容
编写串口 1 数据收发程序,调试编译好固件程序后,将程序下载到
FS-STM32F407 开发板,按复位键观察到串口收到数据后,向串口发送字符
或者字符串(在字符后面加回车键),观察实验现象。
四、主要源代码
程序实现的功能是可以发送数据到缓冲区,等缓冲区的数据达到 5 个
16 进制数之后,会一次性将 5 个数据从缓冲区接收。
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
While(1)
{
HAL_UART_Transmit(&huart1,Buff1,5,100);//轮 询 方 式 发
送
HAL_UART_Receive_IT(&huart1,Buff1,5);//中断方式接收。
中断回调函数里发送 Buff
HAL_Delay(500);
}
}
五、实验结果
输入的数为 12 13 14,第一次点击后因不满 5 个未发送,再点击一次,
只发送五个数字,因此结果为 12、13、14、12、13。
6
实验三 按键数码管实验
一、实验目的
1、需要了解数码管的基本原理
2、了解按键的基本原理
3、需要了解 zlg7290 芯片的使用。
4、了解 IIC 协议
二、实验原理
1、查看原理图
本实验用到 3 个原理图(F 盘下嵌入式 20170228-M4):实验箱底板图、
FS-STM32-V3
核心板图、按键数码管板图(Arduino 里)。
按键数码管板图
7
生成同上。在下载程序后按核心板复位键。
底板图
2、ZLG7290 使用的数码管是共阴数码管。
数码管基本上有两种,一种是共阳数码管,一种是共阴数码。数码管
其实是由 LED 灯组成的共阴数码管,是所有的负极连在一起;共阳数码管,
是所有的正极连在一起。
按键的基本原理:我按键数码管板共有 16 按键,也就是 4*4 共需要 8
个引脚
D6 -D9 1N4148 二极管这四个二极管作用是单向导通的作用。
我们需要做的是,让 8 个不同的数码管显示不同的数据,那么,我们
就需要让数码管轮流的进行显示工作。数码管是一个一个进行显示的,通
过让每一个数码管快速的显示特定的内容,同时让 8 个数码管快速
循环的显示,来达到动态显示的效果。
I2C 总线是由一根数据线(SDA)和一根时钟线(SCL)构成的串行总
线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双
向传送,最高传送速率 400kbps。各种被控制模块均并联在这条总线上,
每个模块都有唯一的地址标识。在信息的传输过程中,I2C 总线上并接的
每一模块电路既可以是主控器,又可以是发送器,这取决于它所要完成的
功能。CPU 发出的控制信号分为地址码和控制量两部分,地址码用来选址,
即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如
对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总
线上,却彼此独立,互不相关。I2C 总线在传送数据过程中共有三种类型
信号, 它们分别是:开始信号、结束信号和应答信号。
3. 我们实现的功能是利用 8 位数码管显示学号的后八位。
8