




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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种省电模式:睡眠、停机和待机模式 -VBAT为RTC和后备寄存器供电2个12位模数转换器,1us转换
3、时间 -双采样和保持功能 -温度传感器调试模式 -串行调试和JTAG接口DMA -支持的外设:定时器、ADC、SPI、I2C和USART多达80个快速I/O口 -26/36/51/80个多功能双向5V兼容的I/O接口多达7个定时器 -多达3个同步的16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道 -两个看门狗定时器 -系统时间定位器:24位的带自动加载功能的多达9个通信接口 -多达2个I2C接口 -多达3个USART接口 -多达2个SPI同步串行接口 -CAN接口 -USB2.0接口1.2.2 STM32单片机的主要特色STM32系列32位闪存微控制器使用来自于
4、ARM公司具有突破性的Cortex-M3内核,该内核是专门设计于满足集高性能、低功耗、实时应用、具有竞争性价格于一体的嵌入式领域的要求。Cortex-M3在系统结构上的增强,让STM32受益无穷;Thumb-2®指令集带来了更高的指令效率和更强的性能;通过紧耦合的嵌套矢量中断控制器,对中断事件的响应比以往更迅速;所有这些又都融入了业界领先的功耗水准。STM32系列给MCU用户带来了前所未有的自由空间,提供了全新的32位产品选项,结合了高性能、实时、低功耗、低电压等特性,同时保持了高集成度和易于开发的优势。它拥有出众和创新的外设,易于开发,可使产品快速进入市场。1.3 STM32单片机
5、开发板简介本课题采用了普中科技的STM32开发板,配备有STM32F103x6芯片。开发板的引脚图如图1-3所示。图1-3 普中科技的STM32开发板实物图1.3.1 STM32开发板的外围硬件资源 -8*8双色点阵模块 -五线四相步进电机 -四线双极性步进电机 -动态数码管/静态数码管 -74HC595 -74HC165 -USB自动下载 -MCU -矩阵键盘、独立按键 -AD/DA/光敏/温敏 -ISP、PS2等等。其电路图如图1-3-1。图1-3-1 普中科技的STM32开发板内部电路图1.3.2 STM32开发板的软件资源STM32开发板提供了丰富的标准例程,其例程列表如下:编号实验名
6、称编号实验名称编号实验名称1LED灯1074HC59519定时器TIM22RCC系统时钟1174HC16520串口通信3独立按键12EXIT中断21DS18B20温度检测4晶体数码管显示13FLASH保存数据22RTC时钟5动态数码管14STM32-24C0223ADC1-DMA6SysTick定时器15STM32-ADDA-PCF859124彩屏例程7步进电机16STM-160225CAN-BUS8矩阵键盘17硬件I2C读取24C0226VirtualCOMPort(USB转串口)9LED点阵18硬件SPI-5951.4 硬件电路本科创课题涉及的硬件电路如图1-4所示。图1-4 STM32
7、LED点阵实验在开发板上的接线图二、系统的软件设计对于一个完整的嵌入式应用系统的开发,硬件的设计与调试工作仅占整个工作量的一半,应用系统的程序设计也是嵌入式系统设计一个非常重要的方面。本次软件编写在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_Disabl
8、e, 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; /输出的最大
9、频率为50HZ GPIO_Init(GPIOB, &GPIO_InitStructure); /初始化GPIOB端口 GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化GPIOB端口2.2 控制LED点阵显示的主程序设计控制LED点阵显示的程序如下: while (1) m+ ; if(m> 4) m=1;switch (m) case 1: for(j=0;j<3;j+)/从左到右3次 for(i=0;i<8;i+) /P2=tabai; GPIOB->BSRR = tabai & 0x00ff; /将数据送
10、到P2口 并屏蔽高位,不干扰高8位IO的使用 GPIOB->BRR = (tabai) & 0x00ff; / P1=0xff; GPIOA->BSRR = 0xff & 0x00ff; /将数据送到P1口 并屏蔽高位,不干扰高8位IO的使用 GPIOA->BRR = (0xff) & 0x00ff; Delay(0X0DFFFF); break; case 2: Delay(800); for(j=0;j<3;j+)/从右到左3次 for(i=0;i<8;i+) /P2=taba7-i; GPIOB->BSRR = taba7-i
11、& 0x00ff; /将数据送到P2口 并屏蔽高位,不干扰高8位IO的使用 GPIOB->BRR = (taba7-i) & 0x00ff; /P1=0xff; GPIOA->BSRR = 0xff & 0x00ff; /将数据送到P1口 并屏蔽高位,不干扰高8位IO的使用 GPIOA->BRR = (0xff) & 0x00ff; Delay(0X0DFFFF); break; case 3: Delay(800); for(j=0;j<3;j+)/从上至下3次for(i=0;i<8;i+)/P2=0x00; GPIOB->
12、BSRR = 0x00 & 0x00ff; /将数据送到P2口 并屏蔽高位,不干扰高8位IO的使用 GPIOB->BRR = (0x00) & 0x00ff; /P1=tabb7-i; GPIOA->BSRR = tabb7-i & 0x00ff; /将数据送到P1口 并屏蔽高位,不干扰高8位IO的使用 GPIOA->BRR = (tabb7-i) & 0x00ff; Delay(0X0DFFFF); break; case 4: Delay(800); for(j=0;j<3;j+)/从下至上 3 次for(i=0;i<8;i+)
13、/P2=0x00; GPIOB->BSRR = 0x00 & 0x00ff; /将数据送到P2口 并屏蔽高位,不干扰高8位IO的使用 GPIOB->BRR = (0x00) & 0x00ff;/P1=tabbi;GPIOA->BSRR = tabbi & 0x00ff; /将数据送到P1口 并屏蔽高位,不干扰高8位IO的使用 GPIOA->BRR = (tabbi) & 0x00ff;Delay(0X0DFFFF); break; 2.3 RCC函数的配置配置程序代码如下:void RCC_Configuration(void) /复位R
14、CC外部设备寄存器到默认值 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)时钟=SYS
15、CLK RCC_HCLKConfig(RCC_SYSCLK_Div1); /配置APB2(PCLK2)钟=AHB时钟 RCC_PCLK2Config(RCC_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
16、_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /配置系统时钟 = PLL时钟 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /检查PLL时钟是否作为系统时钟 while(RCC_GetSYSCLKSource() != 0x08) 2.4 NIVC函数配置配置的程序如下:void NVIC_Configuration(void)#ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);#else NVIC_SetVectorTable(NVIC_Vect
17、Tab_FLASH,0x0);#endif设置向量表的位置和偏移量,如果向量表位于RAM,则偏移量为0x0。如果向量位于FLASH则偏移量为0x0。完整的程序代码见附录。专心-专注-专业三、系统实验首先进行硬件电路搭建,根据图1-4,进行硬件电路连接。连接完毕后,检查导线是否连接错误以及导线是否连接牢固。其次进行软件调试,在Keil软件平台进行软件调试,直至无错误报警。最后将程序下载到开发板。关键点:连接时核心板的BOOT1的短路帽要断开。实验现象:LED点阵从左到右,从右到左,从上至下,从下至上滚动。附录程序代码#include "stm32f10x_lib.h"GPIO
18、_InitTypeDef GPIO_InitStructure;ErrorStatus HSEStartUpStatus;unsigned int taba=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;unsigned int tabb=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;void RCC_Configuration(void);void NVIC_Configuration(void);void Delay(vu32 nCount);/ 主函数/*int main(void) unsigned char i,j;
19、 static unsigned char 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); /关闭调试 端口重新映射 使用仿真器调
20、试时,不能用此语 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, &G
21、PIO_InitStructure); /初始化GPIOB端口 GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化GPIOB端口 while (1) m+ ; if(m> 4) m=1;switch (m) case 1: for(j=0;j<3;j+)/从左到右3次 for(i=0;i<8;i+) /P2=tabai; GPIOB->BSRR = tabai & 0x00ff; /将数据送到P2口 并屏蔽高位,不干扰高8位IO的使用 GPIOB->BRR = (tabai) & 0x00ff; / P1
22、=0xff; GPIOA->BSRR = 0xff & 0x00ff; /将数据送到P1口 并屏蔽高位,不干扰高8位IO的使用 GPIOA->BRR = (0xff) & 0x00ff; Delay(0X0DFFFF); break; case 2: Delay(800); for(j=0;j<3;j+)/从右到左3次 for(i=0;i<8;i+) /P2=taba7-i; GPIOB->BSRR = taba7-i & 0x00ff; /将数据送到P2口 并屏蔽高位,不干扰高8位IO的使用 GPIOB->BRR = (taba7-
23、i) & 0x00ff; /P1=0xff; GPIOA->BSRR = 0xff & 0x00ff; /将数据送到P1口 并屏蔽高位,不干扰高8位IO的使用 GPIOA->BRR = (0xff) & 0x00ff; Delay(0X0DFFFF); break; case 3: Delay(800); for(j=0;j<3;j+)/从上至下3次for(i=0;i<8;i+)/P2=0x00; GPIOB->BSRR = 0x00 & 0x00ff; /将数据送到P2口 并屏蔽高位,不干扰高8位IO的使用 GPIOB->B
24、RR = (0x00) & 0x00ff; /P1=tabb7-i; GPIOA->BSRR = tabb7-i & 0x00ff; /将数据送到P1口 并屏蔽高位,不干扰高8位IO的使用 GPIOA->BRR = (tabb7-i) & 0x00ff; Delay(0X0DFFFF); break; case 4: Delay(800); for(j=0;j<3;j+)/从下至上 3 次for(i=0;i<8;i+)/P2=0x00; GPIOB->BSRR = 0x00 & 0x00ff; /将数据送到P2口 并屏蔽高位,不干扰
25、高8位IO的使用 GPIOB->BRR = (0x00) & 0x00ff;/P1=tabbi;GPIOA->BSRR = tabbi & 0x00ff; /将数据送到P1口 并屏蔽高位,不干扰高8位IO的使用 GPIOA->BRR = (tabbi) & 0x00ff;Delay(0X0DFFFF); break; / 配置RCC/*void RCC_Configuration(void) /复位RCC外部设备寄存器到默认值 RCC_DeInit(); /打开外部高速晶振 RCC_HSEConfig(RCC_HSE_ON); /等待外部高速时钟准备好
26、 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(RC
27、C_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_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /检查PLL时钟是否作为系统时钟 whil
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 借用铁路用地合同范本
- 2025年淮安b2考货运资格证要多久
- 别墅电梯销售合同范本
- 上海退休人员返聘合同范本
- 买卖产品合作合同范本
- 转化单位规则
- 加盟产品经销合同范本
- 化肥试验合同范本
- 北京合伙创业合同范本
- 个人合作股合同范本
- 2023-2024苏教版小学数学5五年级下册(全册)教案设计
- 批评他人发言稿(通用12篇)
- DCF-现金流贴现模型-Excel模版(dcf-估值模型)
- 上海实验学校幼升小测试题资料
- 一年级美术课后服务教案-1
- 重大疾病保险的疾病定义使用规范(2020年修订版)-
- RB/T 040-2020病原微生物实验室生物安全风险管理指南
- GB/T 8162-2018结构用无缝钢管
- 《傲慢与偏见》读书汇报
- 上海专科层次自主招生考试习题集④(含答案)
- 房屋信息查询情况表((2022年-2023年))
评论
0/150
提交评论