基于STM32单片机的点阵显示设计教材Word格式文档下载.docx
- 文档编号:17422252
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:16
- 大小:945.25KB
基于STM32单片机的点阵显示设计教材Word格式文档下载.docx
《基于STM32单片机的点阵显示设计教材Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于STM32单片机的点阵显示设计教材Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
--温度传感器
■调试模式
--串行调试和JTAG接口
■DMA
--支持的外设:
定时器、ADC、SPI、I2C和USART■多达80个快速I/O口
--26/36/51/80个多功能双向5V兼容的I/O接口
■多达7个定时器
4个用于输入
--多达3个同步的16位定时器,每个定时器有多达捕获/输出比较/PWM或脉冲计数的通道
--两个看门狗定时器
--系统时间定位器:
24位的带自动加载功能的■多达9个通信接口
--多达2个I2C接口
--多达3个USART接口
--多达2个SPI同步串行接口
--CAN接口
--USB2.0接口
1.2.2STM32单片机的主要特色
STM32系列32位闪存微控制器使用来自于ARM公司具有突破性的Cortex-M3内核,该内核是专门设计于满足集高性能、低功耗、实时应用、具有竞争性价格于一体的嵌入式领域的要求。
Cortex-M3在系统结构上的增强,让STM32受益无穷;
Thumb-2?
指令集带来了更高的指令效率和更强的性能;
通过紧耦合的嵌套矢量中断控制器,对中断事件的响应比以往更迅速;
所有这些又都融入了业界领先的功耗水准。
STM32系列给MCU用户带来了前所未有的自由空间,提供了全新的32位产品选项,结合了高性能、实时、低功耗、低电压等特性,同时保持了高集成度和易于开发的优势。
它拥有出众和创新的外设,易于开发,可使产品快速进入市场。
1.3STM32单片机开发板简介
本课题采用了普中科技的STM32开发板,配备有STM32F103x6
芯片。
开发板的引脚图如图1-3所示
图1-3普中科技的STM32开发板实物图
1.3.1STM32开发板的外围硬件资源
--8*8双色点阵模块
--五线四相步进电机
--四线双极性步进电机
--动态数码管/静态数码管
--74HC595
--74HC165
--USB自动下载
--MCU
--矩阵键盘、独立按键
--AD/DA/光敏/温敏
--ISP、PS2等等。
其电路图如图1-3-1
图1-3-1普中科技的STM32开发板内部电路图
1.3.2STM32开发板的软件资源
STM32开发板提供了丰富的标准例程,其例程列表如下:
编号
实验名称
1
LED灯
10
74HC595
19
定时器TIM2
2
RCC系统时钟
11
74HC165
20
串口通信
3
独立按键
12
EXIT中断
21
DS18B20温度检测
4
晶体数码管
13
FLASH保存
22
RTC时钟
显示
数据
5
动态数码管
14
STM32-24C0
23
ADC1-DMA
6
SysTick定时器
15
STM32-ADD
A-PCF8591
24
彩屏例程
7
步进电机
16
STM-1602
25
CAN-BUS
8
矩阵键盘
17
硬件I2C读取24C02
26
VirtualCOMPort
(USB转串口)
9
LED点阵
18
硬件SPI-595
1.4硬件电路
本科创课题涉及的硬件电路如图1-4所示
图1-4STM32LED点阵实验在开发板上的接线图
、系统的软件设计
对于一个完整的嵌入式应用系统的开发,硬件的设计与调试工作仅占整个工作量的一半,应用系统的程序设计也是嵌入式系统设计一个非常重要的方面。
本次软件编写在Keil软件平台进行的。
如图2-1
所示。
图2-1Keil软件平台截图
2.1对STM32端口进行配置
对端口的配置程序如下:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|
RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE)/;
/关闭调试端口重新映射使用仿真器调试时,不能用此语
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|
GPIO_Pin_7;
/所/有GPIO为同一类型端口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
//推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz/;
/输出的最大频率为50HZ
GPIO_Init(GPIOB,&
GPIO_InitStructure);
//初始化GPIOB端口
GPIO_Init(GPIOA,&
2.2控制LED点阵显示的主程序设计
控制LED点阵显示的程序如下:
while
(1)
{
m++;
if(m>
4)m=1;
switch(m)
case1:
for(j=0;
j<
3;
j++)////从左到右3次
for(i=0;
i<
8;
i++)
//P2=taba[i];
GPIOB->
BSRR=taba[i]&
0x00ff;
//将数据送到P2口并屏蔽高位,不干扰高8位IO的使用
BRR=(~taba[i])&
//P1=0xff;
GPIOA->
BSRR=0xff&
//将数据送到P1口并屏蔽高位,不干扰高8位IO的使用
BRR=(~0xff)&
Delay(0X0DFFFF);
}
break;
case2:
Delay(800);
j++)////从右到左3次
{for(i=0;
//P2=taba[7-i];
BSRR=taba[7-i]&
//将数据送到P2口并屏蔽高位,不干扰高8位IO的使用
BRR=(~taba[7-i])&
//P1=0xff;
//将数据送到P1口并屏蔽高位,不干扰高8位IO的使用
case3:
j++)////从上至下3次
//P2=0x00;
BSRR=0x00&
//将数据送到P2口并屏蔽高位,不干扰高8位IO的使用
BRR=(~0x00)&
//P1=tabb[7-i];
BSRR=tabb[7-i]&
//将数据送到P1口并屏蔽高位,不干扰高8位IO的使用
BRR=(~tabb[7-i])&
case4:
j++)////从下至上3次
//P1=tabb[i];
BSRR=tabb[i]&
//将数据送到P1口并屏蔽高位,不干扰高8位IO的使用
BRR=(~tabb[i])&
2.3RCC函数的配置
配置程序代码如下:
voidRCC_Configuration(void)
//复位RCC外部设备寄存器到默认值
RCC_DeInit();
//打开外部高速晶振
RCC_HSEConfig(RCC_HSE_ON);
//等待外部高速时钟准备好
HSEStartUpStatus=RCC_WaitForHSEStartUp();
if(HSEStartUpStatus==SUCCESS)//外部高速时钟已经准别好
//开启FLASH的预取功能FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//FLASH延迟2个周期FLASH_SetLatency(FLASH_Latency_2);
//配置AHB(HCLK)时钟=SYSCLK
RCC_HCLKConfig(RCC_SYSCLK_Div1);
//配置APB2(PCLK2)钟=AHB时钟
RCC_PCLK2Config(RCC_HCLK_Div1);
//配置APB1(PCLK1)钟=AHB1/2时钟
RCC_PCLK1Config(RCC_HCLK_Div2);
//配置PLL时钟==外部高速晶体时钟*9PLLCLK=8MHz*9=72MHz
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
//使能PLL时钟RCC_PLLCmd(ENABLE);
//等待PLL时钟就绪
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==
RESET)
//配置系统时钟=PLL时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//检查PLL时钟是否作为系统时钟while(RCC_GetSYSCLKSource()!
=0x08){
2.4NIVC函数配置
配置的程序如下:
voidNVIC_Configuration(void)
#ifdefVECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
#endif
设置向量表的位置和偏移量,如果向量表位于RAM,则偏移量为0x0。
如果向量位于FLASH则偏移量为0x0。
完整的程序代码见附录。
三、系统实验
首先进行硬件电路搭建,根据图1-4,进行硬件电路连接。
连接完毕后,检查导线是否连接错误以及导线是否连接牢固。
其次进行软件调试,在Keil软件平台进行软件调试,直至无错误报警。
最后将程序下载到开发板。
关键点:
连接时核心板的BOOT1的短路帽要断开。
实验现象:
LED点阵从左到右,从右到左,从上至下,从下至上滚动。
附录
程序代码
#include"
stm32f10x_lib.h"
GPIO_InitTypeDefGPIO_InitStructure;
ErrorStatusHSEStartUpStatus;
unsignedinttaba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsignedinttabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
voidRCC_Configuration(void);
voidNVIC_Configuration(void);
voidDelay(vu32nCount);
//主函数//********************************************************************intmain(void)
{unsignedchari,j;
staticunsignedcharm;
#ifdefDEBUG
debug();
RCC_Configuration();
//系统时钟配置函数
NVIC_Configuration();
//NVIC配置函数
//使能APB2总线外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
//关闭调试端口重新映射使用仿真器调试时,不能用此语
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
//推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//输出的最大频率为50HZ
//将数据送到P2口并屏蔽高位,不干扰高8位IO的使用
//将数据送到P1口并屏蔽高位,不干扰高8位IO的使用
//将数据送到P2口并屏蔽高位,不干扰高8位IO的使用
}break;
{//P2=0x00;
//将数据送到P2口并屏蔽高位,不干扰
高8位IO的使用
//将数据送到P1口并屏蔽高位,不干扰高8位IO的使用
}
//将数据送到P2口并屏蔽高位,不干扰高8位IO的使用
//将数据送到P1口并屏蔽高位,不干扰高8位IO的使用
//配置RCC//********************************************************************voidRCC_Configuration(void)
//复位RCC外部设备寄存器到默认值RCC_DeInit();
//打开外部高速晶振RCC_HSEConfig(RCC_HSE_ON);
//等待外部高速时钟准备好HSEStartUpStatus=RCC_WaitForHSEStartUp();
if(HSEStartUpStatus==SUCCESS)//外部高速时钟已经准别好
//配置AHB(HCLK)时钟=SYSCLKRCC_HCLKConfig(RCC_SYSCLK_Div1);
//配置APB2(PCLK2)钟=AHB时钟RCC_PCLK2Config(RCC_HCLK_Div1);
//配置APB1(PCLK1)钟=AHB1/2时钟RCC_PCLK1Config(RCC_HCLK_Div2);
//配置PLL时钟==外部高速晶体时钟*9PLLCLK=8MHz*9=72MHzRCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
//等待PLL时钟就绪while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)
//配置系统时钟=PLL时钟RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//NVIC配置函数//********************************************************************voidNVIC_Configuration(void)
/*SettheVectorTablebaselocationat0x20000000*/NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
#else/*VECT_TAB_FLASH*/
/*SettheVectorTablebaselocationat0x08000000*/NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
//延时函数//********************************************************************voidDelay(vu32nCount)
for(;
nCount!
=0;
nCount--);
#ifdefDEBUG//*******************************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STM32 单片机 点阵 显示 设计 教材