基于STM32单片机的点阵显示设计教材_第1页
基于STM32单片机的点阵显示设计教材_第2页
基于STM32单片机的点阵显示设计教材_第3页
基于STM32单片机的点阵显示设计教材_第4页
基于STM32单片机的点阵显示设计教材_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于 STM32 单片机的点阵显示设计 一、系统的硬件设计 1.1 系统的硬件设计方案 STM32F103x6 是基于 ARM 核心的增强型 32 位带闪存、 USB、 ADC 和 CAN 的微控制器。在电机驱动和应用控制、 医疗和手持设备、 智能仪表、警报系统和视频对讲中有广泛的应用。通过使用 STM32F103x6 进行 LED 点阵显示的设计,学习 STM32 单片机的使 用方法。 1.2 STM32 单片机简介 根据本课题需要采用用了 STM32F103x6 型号单片机 STM32F103XX 增强型系列拥有 ARM 的 Cortex-M3 核心,它为实现 MCU 的需要提供了低成本、

2、缩减的管脚数目、降低的系统内耗,同 时提供了卓越的计算性能和先进的中断系统响应。它的原理图如图 1-2 所示 图 1-2 STM32 单片机原理图 1.2.1 STM32F103x6 单片机的功能 核心 -ARM 32 位的 Cortex-M3CPU -单周期硬件乘法和除法,加快计算 存储器 -从 32K 字节到 128K 字节闪存程序存储器 -多重自举功能 时钟、复位和供电管理 -2.0 至 3.6伏供电和 I/O 管脚 -上电 /断电复位、可编程电压检测器、掉电检测器 -内嵌 4 至 16MHZ 高速晶体振荡器 -内嵌 PLL 供应 CPU 时钟 -内嵌使用 32KHZ 晶体的 RTC 振

3、荡器 低功耗 -3 种省电模式:睡眠、停机和待机模式 -VBAT 为 RTC 和后备寄存器供电 2个 12 位模数转换器, 1us转换时间 -双采样和保持功能 -温度传感器 调试模式 -串行调试和 JTAG 接口 DMA -支持的外设:定时器、 ADC、SPI、I2C 和 USART 多达 80 个快速 I/O 口 -26/36/51/80个多功能双向 5V 兼容的 I/O 接口 多达 7 个定时器 4 个用于输入 -多达 3 个同步的 16 位定时器,每个定时器有多达 捕获/输出比较 /PWM 或脉冲计数的通道 -两个看门狗定时器 -系统时间定位器: 24 位的带自动加载功能的 多达 9 个

4、通信接口 -多达 2 个 I2C 接口 -多达 3 个 USART 接口 -多达 2 个 SPI 同步串行接口 -CAN 接口 -USB2.0 接口 1.2.2 STM32 单片机的主要特色 STM32 系列 32 位闪存微控制器使用来自于 ARM 公司具有突破 性的 Cortex-M3 内核,该内核是专门设计于满足集高性能、低功耗、 实时应用、具有竞争性价格于一体的嵌入式领域的要求。 Cortex-M3 在系统结构上的增强, 让 STM32 受益无穷; Thumb-2? 指令集带来了 更高的指令效率和更强的性能;通过紧耦合的嵌套矢量中断控制器, 对中断事件的响应比以往更迅速; 所有这些又都融

5、入了业界领先的功 耗水准。STM32 系列给 MCU 用户带来了前所未有的自由空间, 提供 了全新的 32 位产品选项,结合了高性能、实时、低功耗、低电压等 特性,同时保持了高集成度和易于开发的优势。 它拥有出众和创新的 外设,易于开发,可使产品快速进入市场。 1.3 STM32 单片机开发板简介 本课题采用了普中科技的 STM32 开发板,配备有 STM32F103x6 芯片。开发板的引脚图如图 1-3 所示 图 1-3 普中科技的 STM32 开发板实物图 1.3.1 STM32 开发板的外围硬件资源 -8*8 双色点阵模块 -五线四相步进电机 -四线双极性步进电机 -动态数码管 /静态数

6、码管 -74HC595 -74HC165 -USB 自动下载 -MCU -矩阵键盘、独立按键 -AD/DA/ 光敏 /温敏 -ISP、PS2 等等。其电路图如图 1-3-1 图 1-3-1 普中科技的 STM32 开发板内部电路图 1.3.2 STM32 开发板的软件资源 STM32 开发板提供了丰富的标准例程,其例程列表如下: 编号 实验名称 编号 实验名称 编号 实验名称 1 LED 灯 10 74HC595 19 定时器 TIM2 2 RCC 系统时 钟 11 74HC165 20 串口通信 3 独立按键 12 EXIT 中断 21 DS18B20 温度 检测 4 晶体数码管 13 FL

7、ASH 保存 22 RTC 时钟 显示 数据 5 动态数码管 14 STM32-24C0 2 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-4 STM32 LED 点阵实验在开发板上的接线图 、系统的软件设计 对于一个完整的嵌入式应用系统的开发,

8、 硬件的设计与调试工作 仅占整个工作量的一半, 应用系统的程序设计也是嵌入式系统设计一 个非常重要的方面。本次软件编写在 Keil 软件平台进行的。如图 2-1 所示。 图 2-1 Keil 软件平台截图 2.1 对 STM32 端口进行配置 对端口的配置程序如下: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE)/;/ 关 闭调试 端口重新映射

9、 使用仿真器调试时,不能用此语 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_Ini

10、t(GPIOB, /初始化 GPIOB 端口 GPIO_Init(GPIOA, /初始化 GPIOB 端口 2.2 控制 LED 点阵显示的主程序设计 控制 LED 点阵显示的程序如下: while (1) m+ ; if(m 4) m=1; switch (m) case 1: for(j=0;j3;j+)/从左到右 3 次 for(i=0;iBSRR = tabai /将数据送到 P2 口 并屏蔽高位, 不干扰高 8位 IO 的使用 GPIOB-BRR = (tabai) / P1=0 xff; GPIOA-BSRR = 0 xff /将数据送到 P1 口 并屏蔽高位, 不干扰高 8位 I

11、O 的使用 GPIOA-BRR = (0 xff) Delay(0X0DFFFF); break; case 2: Delay(800); for(j=0;j3;j+)/从右到左 3 次 for(i=0;iBSRR = taba7-i /将数据送到 P2 口 并屏蔽高 位,不干扰高 8 位 IO 的使用 GPIOB-BRR = (taba7-i) /P1=0 xff; GPIOA-BSRR = 0 xff /将数据送到 P1 口 并屏蔽高位, 不干扰高 8 位 IO 的使用 GPIOA-BRR = (0 xff) Delay(0X0DFFFF); break; case 3: Delay(80

12、0); for(j=0;j3;j+)/从上至下 3 次 for(i=0;iBSRR = 0 x00 /将数据送到 P2 口 并屏蔽高位, 不干扰高 8 位 IO 的使用 GPIOB-BRR = (0 x00) /P1=tabb7-i; GPIOA-BSRR = tabb7-i /将数据送到 P1 口 并屏蔽 高位,不干扰高 8 位 IO 的使用 GPIOA-BRR = (tabb7-i) Delay(0X0DFFFF); break; case 4: Delay(800); for(j=0;j3;j+)/ /从下至上 3 次 for(i=0;iBSRR = 0 x00 /将数据送到 P2 口

13、并屏蔽高位, 不干扰高 8 位 IO 的使用 GPIOB-BRR = (0 x00) /P1=tabbi; GPIOA-BSRR = tabbi /将数据送到 P1口 并屏蔽高位, 不干扰高 8 位 IO 的使用 GPIOA-BRR = (tabbi) Delay(0X0DFFFF); break; 2.3 RCC 函数的配置 配置程序代码如下: void RCC_Configuration(void) /复位 RCC 外部设备寄存器到默认值 RCC_DeInit(); /打开外部高速晶振 RCC_HSEConfig(RCC_HSE_ON); /等待外部高速时钟准备好 HSEStartUpSt

14、atus = 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

15、_HCLK_Div1); /配置 APB1(PCLK1)钟=AHB 1/2 时钟 RCC_PCLK1Config(RCC_HCLK_Div2); /配置 PLL 时钟 = 外部高速晶体时钟 *9 PLLCLK = 8MHz * 9 = 72 MHz RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /使能 PLL 时钟 RCC_PLLCmd(ENABLE); /等待 PLL 时钟就绪 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /配置系统时钟 = PLL 时钟 RCC_SYSCLKC

16、onfig(RCC_SYSCLKSource_PLLCLK); /检查 PLL 时钟是否作为系统时钟 while(RCC_GetSYSCLKSource() != 0 x08) 2.4 NIVC 函数配置 配置的程序如下: void NVIC_Configuration(void) #ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM,0 x0); #else NVIC_SetVectorTable(NVIC_VectTab_FLASH,0 x0); #endif 设置向量表的位置和偏移量,如果向量表位于 RAM ,则偏移量 为 0

17、x0。如果向量位于 FLASH 则偏移量为 0 x0。 完整的程序代码见 附录。 三、系统实验 首先进行硬件电路搭建,根据图 1-4,进行硬件电路连接。连接 完毕后,检查导线是否连接错误以及导线是否连接牢固。 其次进行软 件调试,在 Keil 软件平台进行软件调试,直至无错误报警。最后将 程序下载到开发板。 关键点:连接时核心板的 BOOT1 的短路帽要断开。 实验现象: LED 点阵从左到右,从右到左,从上至下,从下至 上滚动 。 附录 程序代码 #include stm32f10 x_lib.h GPIO_InitTypeDef GPIO_InitStructure; ErrorStatu

18、s HSEStartUpStatus; unsigned int taba=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; unsigned int tabb=0 x01,0 x02,0 x04,0 x08,0 x10,0 x20,0 x40,0 x80; void RCC_Configuration(void); void NVIC_Configuration(void); void Delay(vu32 nCount); / 主函数 /* int main(void) unsigned char i,j; static unsigned c

19、har m; #ifdef DEBUG debug(); #endif 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); / 关闭调试 端口重新映射 使用仿真器调试时,不能用此语 GP

20、IO_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, /初始化 GPIOB

21、端口 GPIO_Init(GPIOA, /初始化 GPIOB 端口 while (1) m+ ; if(m 4) m=1; switch (m) case 1: for(j=0;j3;j+)/从左到右 3 次 for(i=0;iBSRR = tabai /将数据送到 P2口 并屏蔽高位,不干扰 高 8 位 IO 的使用 GPIOB-BRR = (tabai) / P1=0 xff; GPIOA-BSRR = 0 xff /将数据送到 P1口 并屏蔽高位,不干扰高 8 位 IO 的使用 GPIOA-BRR = (0 xff) Delay(0X0DFFFF); break; case 2: Del

22、ay(800); for(j=0;j3;j+)/从右到左 3 次 for(i=0;iBSRR = taba7-i /将数据送到 P2 口 并屏蔽高位,不 干扰高 8 位 IO 的使用 GPIOB-BRR = (taba7-i) /P1=0 xff; GPIOA-BSRR = 0 xff /将数据送到 P1口 并屏蔽高位,不干扰高 8 位 IO 的使用 GPIOA-BRR = (0 xff) Delay(0X0DFFFF); break; case 3: Delay(800); for(j=0;j3;j+)/从上至下 3 次 for(i=0;iBSRR = 0 x00 /将数据送到 P2 口并屏

23、蔽高位,不干扰 高 8 位 IO 的使用 GPIOB-BRR = (0 x00) /P1=tabb7-i; GPIOA-BSRR = tabb7-i /将数据送到 P1 口 并屏蔽高位,不 干扰高 8 位 IO 的使用 GPIOA-BRR = (tabb7-i) Delay(0X0DFFFF); break; case 4: Delay(800); for(j=0;j3;j+)/从下至上 3 次 for(i=0;iBSRR = 0 x00 /将数据送到 P2 口 并屏蔽高位,不干扰 高 8 位 IO 的使用 GPIOB-BRR = (0 x00) /P1=tabbi; GPIOA-BSRR =

24、 tabbi /将数据送到 P1口 并屏蔽高位, 不干扰 高 8 位 IO 的使用 GPIOA-BRR = (tabbi) Delay(0X0DFFFF); break; / 配置 RCC /* void RCC_Configuration(void) /复位 RCC 外部设备寄存器到默认值 RCC_DeInit(); /打开外部高速晶振 RCC_HSEConfig(RCC_HSE_ON); /等待外部高速时钟准备好 HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus = SUCCESS) / 外部高速时钟已经准别好

25、/开启 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)钟=AHB 1/2 时钟 RCC_PCLK1Config(RCC_HCLK_Div2); /配置

26、PLL 时钟 = 外部高速晶体时钟 *9 PLLCLK = 8MHz * 9 = 72 MHz 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() != 0 x08) / NVIC 配置函数 /* void NVIC_Co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论