实 验 报 告
课程名称
嵌入式系统原理
学生学院
自动化学院
专业班级
物联网 1 班
学
号
学生姓名
指导教师
3113001555
梁志成
张小波
2015 年 10 月 24 日
实验一:跑马灯
一、 实验目的:
1. 熟悉并掌握 ALIENTEK MiniSTM32 开发板的使用,
2. 熟悉 Keil u Vision3 的嵌入式编程环境,
3. 实现控制这两个灯实现交替闪烁的类跑马灯效果,
4. 如何控制 STM32 的 I/O 口输出。
二、 实验设备:
ALIENTEK MiniSTM32 开发板、PC 机、Keil u Vision3 开发软件、MCUISP 下载器
三、 实验内容:
1. 硬件设计:
STM32 的 I、O 端口都由 7 个寄存器控制。他们分别是:2 个 32 位的数据寄存器
IDR 和 ODR;1 个 32 位的置位/复位寄存器一个 16 位的复位寄存器 BRR;配置模
式的 2 个 32 位的端口配置寄存器 CRL 和 CRH; 1 个 32 位的锁存寄存器 LCKR;
常用的 IO 端口寄存器只有 4 个:CRL、CRH、IDR、ODR。CRL 和 CRH 控制着每个 IO
口的模式及输出速率。
STM32 的大多 I/O 口是 5V 兼容的,从该芯片的数据手册管脚描述章节查到:I/O
Level 标 FT 的就是 5V 电平兼容的。
2. 软件设计:
//led.c 文件代码
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,
ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
//main 主代码:
int main(void)
{
u8 t=0;
delay_init(72);
NVIC_Configuration();
LED_Init();
OLED_Init();
OLED_ShowString(0,0,"ALIENTEK",24);
OLED_ShowString(0,24, "0.96' OLED TEST",16);
OLED_ShowString(0,40,"ATOM 2014/3/7",12);
OLED_ShowString(0,52,"ASCII:",12);
OLED_ShowString(64,52,"CODE:",12);
OLED_Refresh_Gram();
t=' ';
while(1)
{
OLED_ShowChar(36,52,t,12,1);
OLED_ShowNum(94,52,t,3,12);
OLED_Refresh_Gram();
t++;
if(t>'~')t=' ';
delay_ms(500);
LED0=!LED0;
}
}
四、 实验结果:
可以观察左边绿色等和红色灯间歇的跳转。
实验二:串口实验
一、 实验目的:
1. STM32 串口的基本使用方法,
2. 串口的调试方法
二、 实验设备:
ALIENTEK MiniSTM32 开发板、PC 机、Keil u Vision3 开发软件、MCUISP 下载器
三、 实验内容:
1.硬件设计:
由于串口 1 与 USB 串口默认是分开的,因此需要通过跳线帽来连接一下。因此把
P4 的 RXD 和 TXD 用跳线帽与 P3 的 PA9 和 PA10 连接起来。
2.软件设计:
//main.c 主程序代码
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
int main(void)
{
u8 t;
u8 len;
u16 times=0;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);
//延时初始化
uart_init(72,9600);
//串口初始化为 9600
LED_Init();
while(1)
{
//初始化与 LED 连接的硬件接口
if(USART_RX_STA&0x80)
{
len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
printf("\r\n 您发送的消息为:\r\n");
for(t=0;tDR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);//等待发送结束
printf("\n\n");//插入换行
USART_RX_STA=0;
}else
{
times++;
if(times%5000==0)
{
}
printf("\r\nMiniSTM32 开发板 串口实验\r\n");
if(times%200==0)printf("请输入数据,以回车键结束\r\n");
if(times%30==0)LED0=!LED0;//闪烁 LED,提示系统正在运行.
delay_ms(10);
}
}
}
四、 实验结果:
如图所示,显示了,串口的调试的成功的。
实验三:外部中断实验
一、 实验目的:
1. 掌握 STM32 基本的 I/O 口控制
2. 掌握外部中断控制输入口
二、 实验设备:
ALIENTEK MiniSTM32 开发板、PC 机、Keil u Vision3 开发软件、MCUISP 下载器
三、 实验内容:
1.硬件设计
选取几个 STM32 的 I/O 口作为外部中断输入,根据一下步骤:
1. 初始化 I/O 口为输入
2. 开启 I/O 口复用时钟,设置 IO 口与中断线的映射关系
3. 开启与该 I/O 口相对的线上中断/事件,设置触发条件
4. 配置中断分组(NVIC)并使能中断
5. 编写中断服务函数
2.软件设计
//exti.c
#include "key.h"
#include "delay.h"
#include "usart.h"
//外部中断 0 服务程序
void EXTI0_IRQHandler(void)
{
}
delay_ms(10);//消抖
if(KEY2==1)
//按键 2
{
}
LED0=!LED0;
LED1=!LED1;
EXTI->PR=1<<0; //清除 LINE0 上的中断标志位
//外部中断 15~10 服务程序
void EXTI15_10_IRQHandler(void)
{
delay_ms(10);
//消抖
if(KEY0==0)
//按键 0
{
LED0=!LED0;
}else if(KEY1==0)//按键 1
{
}
LED1=!LED1;
EXTI->PR=1<<13;
//清除 LINE13 上的中断标志位
EXTI->PR=1<<15;
//清除 LINE15 上的中断标志位
}
//外部中断初始化程序
//初始化 PA0,PA13,PA15 为中断输入.
void EXTIX_Init(void)
{
}
RCC->APB2ENR|=1<<2;
//使能 PORTA 时钟
JTAG_Set(JTAG_SWD_DISABLE);//关闭 JTAG 和 SWD
GPIOA->CRL&=0XFFFFFFF0;//PA0 设置成输入
GPIOA->CRL|=0X00000008;
GPIOA->CRH&=0X0F0FFFFF;//PA13,15 设置成输入
GPIOA->CRH|=0X80800000;
GPIOA->ODR|=1<<13;
//PA13 上拉,PA0 默认下拉
GPIOA->ODR|=1<<15;
//PA15 上拉
Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发
Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发
Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //抢占 2,子优先级 2,组 2
MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2)//抢占 2 子优先级 1,组 2
//main.c 主程序代码
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);
//延时初始化
uart_init(72,9600); //串口初始化
LED_Init();
//初始化与 LED 连接的硬件接口
EXTIX_Init();
//外部中断初始化
while(1)
{
}
printf("OK\n");
delay_ms(1000);
}
四、 实验结果:
在编译成功之后,下载代码到 MiniSTM32 开发板上,可以通过按下 KEY0、KEY1、
KEY2,DS0、DS1 跟着按键的变化而变化。