基于STM32單片機(jī)的點(diǎn)陣顯示設(shè)計(jì)(共21頁(yè))_第1頁(yè)
基于STM32單片機(jī)的點(diǎn)陣顯示設(shè)計(jì)(共21頁(yè))_第2頁(yè)
基于STM32單片機(jī)的點(diǎn)陣顯示設(shè)計(jì)(共21頁(yè))_第3頁(yè)
基于STM32單片機(jī)的點(diǎn)陣顯示設(shè)計(jì)(共21頁(yè))_第4頁(yè)
基于STM32單片機(jī)的點(diǎn)陣顯示設(shè)計(jì)(共21頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上基于STM32單片機(jī)的點(diǎn)陣顯示設(shè)計(jì)一、系統(tǒng)的硬件設(shè)計(jì)1.1系統(tǒng)的硬件設(shè)計(jì)方案STM32F103x6是基于ARM核心的增強(qiáng)型32位帶閃存、USB、ADC和CAN的微控制器。在電機(jī)驅(qū)動(dòng)和應(yīng)用控制、醫(yī)療和手持設(shè)備、智能儀表、警報(bào)系統(tǒng)和視頻對(duì)講中有廣泛的應(yīng)用。通過(guò)使用STM32F103x6進(jìn)行LED點(diǎn)陣顯示的設(shè)計(jì),學(xué)習(xí)STM32單片機(jī)的使用方法。1.2 STM32單片機(jī)簡(jiǎn)介根據(jù)本課題需要采用用了STM32F103x6型號(hào)單片機(jī)STM32F103XX增強(qiáng)型系列擁有ARM的Cortex-M3核心,它為實(shí)現(xiàn)MCU的需要提供了低成本、縮減的管腳數(shù)目、降低的系統(tǒng)內(nèi)耗,同時(shí)提供了卓越的計(jì)

2、算性能和先進(jìn)的中斷系統(tǒng)響應(yīng)。它的原理圖如圖1-2所示。圖1-2 STM32單片機(jī)原理圖1.2.1 STM32F103x6單片機(jī)的功能核心 -ARM 32位的Cortex-M3CPU -單周期硬件乘法和除法,加快計(jì)算存儲(chǔ)器 -從32K字節(jié)到128K字節(jié)閃存程序存儲(chǔ)器 -多重自舉功能時(shí)鐘、復(fù)位和供電管理 -2.0至3.6伏供電和I/O管腳 -上電/斷電復(fù)位、可編程電壓檢測(cè)器、掉電檢測(cè)器 -內(nèi)嵌4至16MHZ高速晶體振蕩器 -內(nèi)嵌PLL供應(yīng)CPU時(shí)鐘 -內(nèi)嵌使用32KHZ晶體的RTC振蕩器低功耗 -3種省電模式:睡眠、停機(jī)和待機(jī)模式 -VBAT為RTC和后備寄存器供電2個(gè)12位模數(shù)轉(zhuǎn)換器,1us轉(zhuǎn)換

3、時(shí)間 -雙采樣和保持功能 -溫度傳感器調(diào)試模式 -串行調(diào)試和JTAG接口DMA -支持的外設(shè):定時(shí)器、ADC、SPI、I2C和USART多達(dá)80個(gè)快速I/O口 -26/36/51/80個(gè)多功能雙向5V兼容的I/O接口多達(dá)7個(gè)定時(shí)器 -多達(dá)3個(gè)同步的16位定時(shí)器,每個(gè)定時(shí)器有多達(dá)4個(gè)用于輸入捕獲/輸出比較/PWM或脈沖計(jì)數(shù)的通道 -兩個(gè)看門狗定時(shí)器 -系統(tǒng)時(shí)間定位器:24位的帶自動(dòng)加載功能的多達(dá)9個(gè)通信接口 -多達(dá)2個(gè)I2C接口 -多達(dá)3個(gè)USART接口 -多達(dá)2個(gè)SPI同步串行接口 -CAN接口 -USB2.0接口1.2.2 STM32單片機(jī)的主要特色STM32系列32位閃存微控制器使用來(lái)自于

4、ARM公司具有突破性的Cortex-M3內(nèi)核,該內(nèi)核是專門設(shè)計(jì)于滿足集高性能、低功耗、實(shí)時(shí)應(yīng)用、具有競(jìng)爭(zhēng)性價(jià)格于一體的嵌入式領(lǐng)域的要求。Cortex-M3在系統(tǒng)結(jié)構(gòu)上的增強(qiáng),讓STM32受益無(wú)窮;Thumb-2®指令集帶來(lái)了更高的指令效率和更強(qiáng)的性能;通過(guò)緊耦合的嵌套矢量中斷控制器,對(duì)中斷事件的響應(yīng)比以往更迅速;所有這些又都融入了業(yè)界領(lǐng)先的功耗水準(zhǔn)。STM32系列給MCU用戶帶來(lái)了前所未有的自由空間,提供了全新的32位產(chǎn)品選項(xiàng),結(jié)合了高性能、實(shí)時(shí)、低功耗、低電壓等特性,同時(shí)保持了高集成度和易于開(kāi)發(fā)的優(yōu)勢(shì)。它擁有出眾和創(chuàng)新的外設(shè),易于開(kāi)發(fā),可使產(chǎn)品快速進(jìn)入市場(chǎng)。1.3 STM32單片機(jī)

5、開(kāi)發(fā)板簡(jiǎn)介本課題采用了普中科技的STM32開(kāi)發(fā)板,配備有STM32F103x6芯片。開(kāi)發(fā)板的引腳圖如圖1-3所示。圖1-3 普中科技的STM32開(kāi)發(fā)板實(shí)物圖1.3.1 STM32開(kāi)發(fā)板的外圍硬件資源 -8*8雙色點(diǎn)陣模塊 -五線四相步進(jìn)電機(jī) -四線雙極性步進(jìn)電機(jī) -動(dòng)態(tài)數(shù)碼管/靜態(tài)數(shù)碼管 -74HC595 -74HC165 -USB自動(dòng)下載 -MCU -矩陣鍵盤、獨(dú)立按鍵 -AD/DA/光敏/溫敏 -ISP、PS2等等。其電路圖如圖1-3-1。圖1-3-1 普中科技的STM32開(kāi)發(fā)板內(nèi)部電路圖1.3.2 STM32開(kāi)發(fā)板的軟件資源STM32開(kāi)發(fā)板提供了豐富的標(biāo)準(zhǔn)例程,其例程列表如下:編號(hào)實(shí)驗(yàn)名

6、稱編號(hào)實(shí)驗(yàn)名稱編號(hào)實(shí)驗(yàn)名稱1LED燈1074HC59519定時(shí)器TIM22RCC系統(tǒng)時(shí)鐘1174HC16520串口通信3獨(dú)立按鍵12EXIT中斷21DS18B20溫度檢測(cè)4晶體數(shù)碼管顯示13FLASH保存數(shù)據(jù)22RTC時(shí)鐘5動(dòng)態(tài)數(shù)碼管14STM32-24C0223ADC1-DMA6SysTick定時(shí)器15STM32-ADDA-PCF859124彩屏例程7步進(jìn)電機(jī)16STM-160225CAN-BUS8矩陣鍵盤17硬件I2C讀取24C0226VirtualCOMPort(USB轉(zhuǎn)串口)9LED點(diǎn)陣18硬件SPI-5951.4 硬件電路本科創(chuàng)課題涉及的硬件電路如圖1-4所示。圖1-4 STM32

7、LED點(diǎn)陣實(shí)驗(yàn)在開(kāi)發(fā)板上的接線圖二、系統(tǒng)的軟件設(shè)計(jì)對(duì)于一個(gè)完整的嵌入式應(yīng)用系統(tǒng)的開(kāi)發(fā),硬件的設(shè)計(jì)與調(diào)試工作僅占整個(gè)工作量的一半,應(yīng)用系統(tǒng)的程序設(shè)計(jì)也是嵌入式系統(tǒng)設(shè)計(jì)一個(gè)非常重要的方面。本次軟件編寫在Keil軟件平臺(tái)進(jìn)行的。如圖2-1所示。圖2-1 Keil軟件平臺(tái)截圖2.1對(duì)STM32端口進(jìn)行配置對(duì)端口的配置程序如下:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disabl

8、e, ENABLE); /關(guān)閉調(diào)試 端口重新映射 使用仿真器調(diào)試時(shí),不能用此語(yǔ) 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點(diǎn)陣顯示的主程序設(shè)計(jì)控制LED點(diǎn)陣顯示的程序如下: 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; /將數(shù)據(jù)送

10、到P2口 并屏蔽高位,不干擾高8位IO的使用 GPIOB->BRR = (tabai) & 0x00ff; / P1=0xff; GPIOA->BSRR = 0xff & 0x00ff; /將數(shù)據(jù)送到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; /將數(shù)據(jù)送到P2口 并屏蔽高位,不干擾高8位IO的使用 GPIOB->BRR = (taba7-i) & 0x00ff; /P1=0xff; GPIOA->BSRR = 0xff & 0x00ff; /將數(shù)據(jù)送到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; /將數(shù)據(jù)送到P2口 并屏蔽高位,不干擾高8位IO的使用 GPIOB->BRR = (0x00) & 0x00ff; /P1=tabb7-i; GPIOA->BSRR = tabb7-i & 0x00ff; /將數(shù)據(jù)送到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; /將數(shù)據(jù)送到P2口 并屏蔽高位,不干擾高8位IO的使用 GPIOB->BRR = (0x00) & 0x00ff;/P1=tabbi;GPIOA->BSRR = tabbi & 0x00ff; /將數(shù)據(jù)送到P1口 并屏蔽高位,不干擾高8位IO的使用 GPIOA->BRR = (tabbi) & 0x00ff;Delay(0X0DFFFF); break; 2.3 RCC函數(shù)的配置配置程序代碼如下:void RCC_Configuration(void) /復(fù)位R

14、CC外部設(shè)備寄存器到默認(rèn)值 RCC_DeInit(); /打開(kāi)外部高速晶振 RCC_HSEConfig(RCC_HSE_ON); /等待外部高速時(shí)鐘準(zhǔn)備好 HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus = SUCCESS) /外部高速時(shí)鐘已經(jīng)準(zhǔn)別好 /開(kāi)啟FLASH的預(yù)取功能 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /FLASH延遲2個(gè)周期 FLASH_SetLatency(FLASH_Latency_2); /配置AHB(HCLK)時(shí)鐘=SYS

15、CLK RCC_HCLKConfig(RCC_SYSCLK_Div1); /配置APB2(PCLK2)鐘=AHB時(shí)鐘 RCC_PCLK2Config(RCC_HCLK_Div1); /配置APB1(PCLK1)鐘=AHB 1/2時(shí)鐘 RCC_PCLK1Config(RCC_HCLK_Div2); /配置PLL時(shí)鐘 = 外部高速晶體時(shí)鐘*9 PLLCLK = 8MHz * 9 = 72 MHz RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /使能PLL時(shí)鐘 RCC_PLLCmd(ENABLE); /等待PLL時(shí)鐘就緒 while(RCC

16、_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /配置系統(tǒng)時(shí)鐘 = PLL時(shí)鐘 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /檢查PLL時(shí)鐘是否作為系統(tǒng)時(shí)鐘 while(RCC_GetSYSCLKSource() != 0x08) 2.4 NIVC函數(shù)配置配置的程序如下:void NVIC_Configuration(void)#ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);#else NVIC_SetVectorTable(NVIC_Vect

17、Tab_FLASH,0x0);#endif設(shè)置向量表的位置和偏移量,如果向量表位于RAM,則偏移量為0x0。如果向量位于FLASH則偏移量為0x0。完整的程序代碼見(jiàn)附錄。專心-專注-專業(yè)三、系統(tǒng)實(shí)驗(yàn)首先進(jìn)行硬件電路搭建,根據(jù)圖1-4,進(jìn)行硬件電路連接。連接完畢后,檢查導(dǎo)線是否連接錯(cuò)誤以及導(dǎo)線是否連接牢固。其次進(jìn)行軟件調(diào)試,在Keil軟件平臺(tái)進(jìn)行軟件調(diào)試,直至無(wú)錯(cuò)誤報(bào)警。最后將程序下載到開(kāi)發(fā)板。關(guān)鍵點(diǎn):連接時(shí)核心板的BOOT1的短路帽要斷開(kāi)。實(shí)驗(yàn)現(xiàn)象:LED點(diǎn)陣從左到右,從右到左,從上至下,從下至上滾動(dòng)。附錄程序代碼#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);/ 主函數(shù)/*int main(void) unsigned char i,j;

19、 static unsigned char m;#ifdef DEBUG debug();#endif RCC_Configuration(); /系統(tǒng)時(shí)鐘配置函數(shù) NVIC_Configuration(); /NVIC配置函數(shù) /使能APB2總線外設(shè)時(shí)鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); /關(guān)閉調(diào)試 端口重新映射 使用仿真器調(diào)

20、試時(shí),不能用此語(yǔ) 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; /將數(shù)據(jù)送到P2口 并屏蔽高位,不干擾高8位IO的使用 GPIOB->BRR = (tabai) & 0x00ff; / P1

22、=0xff; GPIOA->BSRR = 0xff & 0x00ff; /將數(shù)據(jù)送到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; /將數(shù)據(jù)送到P2口 并屏蔽高位,不干擾高8位IO的使用 GPIOB->BRR = (taba7-

23、i) & 0x00ff; /P1=0xff; GPIOA->BSRR = 0xff & 0x00ff; /將數(shù)據(jù)送到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; /將數(shù)據(jù)送到P2口 并屏蔽高位,不干擾高8位IO的使用 GPIOB->B

24、RR = (0x00) & 0x00ff; /P1=tabb7-i; GPIOA->BSRR = tabb7-i & 0x00ff; /將數(shù)據(jù)送到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; /將數(shù)據(jù)送到P2口 并屏蔽高位,不干擾

25、高8位IO的使用 GPIOB->BRR = (0x00) & 0x00ff;/P1=tabbi;GPIOA->BSRR = tabbi & 0x00ff; /將數(shù)據(jù)送到P1口 并屏蔽高位,不干擾高8位IO的使用 GPIOA->BRR = (tabbi) & 0x00ff;Delay(0X0DFFFF); break; / 配置RCC/*void RCC_Configuration(void) /復(fù)位RCC外部設(shè)備寄存器到默認(rèn)值 RCC_DeInit(); /打開(kāi)外部高速晶振 RCC_HSEConfig(RCC_HSE_ON); /等待外部高速時(shí)鐘準(zhǔn)備好

26、 HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus = SUCCESS) /外部高速時(shí)鐘已經(jīng)準(zhǔn)別好 /開(kāi)啟FLASH的預(yù)取功能 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /FLASH延遲2個(gè)周期 FLASH_SetLatency(FLASH_Latency_2); /配置AHB(HCLK)時(shí)鐘=SYSCLK RCC_HCLKConfig(RCC_SYSCLK_Div1); /配置APB2(PCLK2)鐘=AHB時(shí)鐘 RCC_PCLK2Config(RC

27、C_HCLK_Div1); /配置APB1(PCLK1)鐘=AHB 1/2時(shí)鐘 RCC_PCLK1Config(RCC_HCLK_Div2); /配置PLL時(shí)鐘 = 外部高速晶體時(shí)鐘*9 PLLCLK = 8MHz * 9 = 72 MHz RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /使能PLL時(shí)鐘 RCC_PLLCmd(ENABLE); /等待PLL時(shí)鐘就緒 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /配置系統(tǒng)時(shí)鐘 = PLL時(shí)鐘 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /檢查PLL時(shí)鐘是否作為系統(tǒng)時(shí)鐘 whil

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論