版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2018 年物聯(lián)網(wǎng)綜合應(yīng)用基礎(chǔ)學(xué)院:計(jì)算機(jī)與通信專業(yè):物聯(lián)網(wǎng)工程班級(jí)(講臺(tái)) :物聯(lián)網(wǎng) 1601都圓圓學(xué)號(hào):41624624裝 訂 時(shí) 間:2018 年7 月18 日科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)通學(xué)院專業(yè):物聯(lián)網(wǎng)工程班級(jí):物聯(lián) 1601都圓圓學(xué)號(hào):41624624實(shí)驗(yàn)日期:2018年7 月18日實(shí)驗(yàn)名稱: I/O 口位輸出(流水燈)實(shí)驗(yàn)(一)實(shí)驗(yàn)?zāi)康模?.2.3.結(jié)合 MDK5,掌握 STM32 編程與調(diào)試的步驟;理解 STM32 庫函數(shù)與寄存器編程的;學(xué)會(huì) I/O 口位輸出的方法;實(shí)驗(yàn)材料:硬件準(zhǔn)備:1.STM32 最小系統(tǒng)板;(STM32f103C8T6A:STM32:F: 103:C: 8: T
2、: 6:A::產(chǎn)品系列:基于 ARM產(chǎn)品類型:通用類型;產(chǎn)品子系列:增強(qiáng)型;引腳數(shù)目:48 腳;的 32 位微控制器;閃存器容量:64K 字節(jié)的閃存寄存器;封裝:;溫度范圍:工業(yè)級(jí)溫度范圍,-40 攝氏度85 攝氏度;內(nèi)部代碼;已編程的器件代號(hào)(3 個(gè)數(shù)字).)2.3.4.流水燈模塊(發(fā)光二極管 8 個(gè),330電阻 8 個(gè),排針 19P,萬能板一塊);杜邦線 9 根;CH340(或 SWD 仿真器)。準(zhǔn)備:安裝 MDK5,并1.2.(;LED文件夾,從庫函數(shù)文件夾到USER文件夾;USER:FWLIB: CORE:main.c stm32f10 x_it.c system_stm32f10 x
3、.c led.c ;stm32f10 x_gpio.c stm32f10 x_rcc.c misc.c stm32f10 x_usart.c ; startup_stm32f10 x_md.s ;SYSTEM: delay.c sys.c usart.c .)啟動(dòng)工程。3.實(shí)驗(yàn)內(nèi)容:1.2.3.初始化內(nèi)部SysTick 定時(shí)器,為系統(tǒng)分配時(shí)鐘等;初始化 LED,設(shè)置 PA0PA7,通用推挽輸出,2Mhz;循環(huán)改變引腳的電平(庫函數(shù)和寄存器兩種方法)。LED 共陽:引腳輸出低電平時(shí):LED點(diǎn)亮熄滅引腳輸出時(shí):LED實(shí)驗(yàn)過程: 初始化LED,設(shè)置 PA0-PA7 為輸出口:void LED_Cfg
4、(void)GPIO_InitTypeDef led_gpio; /定義 I/O 變量RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /使能端口 A 時(shí)鐘/* 配置 LED I/O */led_gpio.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;/*推挽輸出:IO 輸出 0-接GND, IO 輸出 1 -接 VCC,讀輸入值是未知的GPIO_Mode_AIN
5、GPIO_Mode_IN_FLOATINGGPIO_Mode_IPD GPIO_Mode_IPU GPIO_Mode_Out_OD GPIO_Mode_Out_PP GPIO_Mode_AF_ODGPIO_Mode_AF_PP= 0 x0,= 0 x04,= 0 x28,= 0 x48,= 0 x14,= 0 x10,= 0 x1C,= 0 x18/模擬輸入/浮空輸入/下拉輸入/上拉輸入/開漏輸出/推挽輸出/復(fù)用開漏輸出/復(fù)用推挽輸出*/led_gpio.GPIO_Mode = GPIO_Mode_Out_PP; /通用推挽輸出/*GPIO_Speed_2MHzGPIO_Speed_10MHz
6、 GPIO_Speed_50MHz/2MHz/10MHz/50MHz*/led_gpio.GPIO_Speed = GPIO_Speed_2MHz; / 2MHz GPIO_Init(GPIOA, &led_gpio);/* 配置完后關(guān)閉所有 LED */LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF;LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF; 設(shè)置LED 輸出狀態(tài):/* 控制 LED1-LED4(直接操作寄存器) */#define LED1_TOGGLE GPIOA-ODR = GPIO_Pin_0/ PA0 輸出相反狀態(tài)/ PA0 輸
7、出/ PA0 輸出低電平LED1 反轉(zhuǎn)LED1 關(guān)LED1 開#define LED1_OFF#define LED1_ONGPIOA-BSRR = GPIO_Pin_0GPIOA-BRR= GPIO_Pin_0(LED2,LED3,LED4 的設(shè)置同理)/* 控制 LED5-LED8(調(diào)用庫函數(shù)) */ 方法一:庫函數(shù) GPIO_SetBits& GPIO_ResetBits#define LED5_OFF#define LED5_ONGPIO_SetBits(GPIOA, GPIO_Pin_4)/ PA4 輸出GPIO_ResetBits(GPIOA, GPIO_Pin_4) / PA4
8、輸出低電平LED5 關(guān)LED5 開/ 方法二:庫函數(shù) GPIO_WriteBit#define LED5_OFF#define LED5_ONGPIO_WriteBit(GPIOA,GPIO_Pin_5,Bit_SET)GPIO_WriteBit(GPIOA,GPIO_Pin_5,Bit_RESET)(LED6,LED7,LED8 的設(shè)置同理) 設(shè)置 SysTick 定時(shí)器精確延時(shí):#include delay.hsic u8fac_us = 0; /us 延時(shí)倍乘數(shù)void delay_init() /初始化延遲函數(shù),SYSTICK 的時(shí)鐘固定為 HCLK 時(shí)鐘的 1/8SysTick_CL
9、KSourceConfig(SysTick_CLKSource_HCLK_Div8); /選擇外部時(shí)鐘fac_us=SystemCoreClock/8000000; /為系統(tǒng)時(shí)鐘的 1/8000000void delay_us(u32 nus) /nus 為要延時(shí)的 us 數(shù).u32 temp;SysTick-LOAD=nus*fac_us; /時(shí)間加載 SysTick-VAL=0 x00; /清空計(jì)數(shù)器SysTick-CTRL|=SysTick_CTRL_ENABLE_Msk ; /開始倒數(shù) do temp=SysTick-CTRL;while(temp&0 x01&!(temp&(1CTR
10、L&=SysTick_CTRL_ENABLE_Msk; /關(guān)閉計(jì)數(shù)器 SysTick-VAL =0X00; /清空計(jì)數(shù)器(ms 的函數(shù)同理) 主函數(shù)設(shè)置 while 循環(huán),實(shí)現(xiàn)功能:main(void)t=100;SystemInit();LED_Cfg(); delay_init(); /初始化while (1)LED1_ON;delay_ms(t);LED1_OFF;LED3_ON;delay_ms(t);LED3_OFF; LED5_ON;delay_ms(t);LED5_OFF; LED7_ON;delay_ms(t);LED7_OFF;LED2_ON;delay_ms(t);LED2
11、_OFF;LED4_ON;delay_ms(t);LED4_OFF; LED6_ON;delay_ms(t);LED6_OFF; LED8_ON;delay_ms(t);LED8_OFF;測(cè)試:程序成功運(yùn)行后:8 個(gè) LED 燈會(huì)循環(huán)依次點(diǎn)亮熄滅。(如左圖)科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)通學(xué)院專業(yè):物聯(lián)網(wǎng)工程班級(jí):物聯(lián) 1601都圓圓學(xué)號(hào):41624624實(shí)驗(yàn)日期:2018 年7 月18日實(shí)驗(yàn)名稱:I/O 口位輸入(按鍵)實(shí)驗(yàn)(二)實(shí)驗(yàn)?zāi)康模?.學(xué)會(huì) I/O 口位輸入的方法。實(shí)驗(yàn)材料:硬件準(zhǔn)備:1.2.3.4.5.STM32 最小系統(tǒng)板;流水燈模塊(發(fā)光二極管 8 個(gè),330電阻 8 個(gè),排針 19P,
12、萬能板一塊);按鍵模塊(按鍵 4 個(gè),1k電阻 4 個(gè));杜邦線 9 根;CH340(或 SWD 仿真器)。準(zhǔn)備:安裝 MDK5,并1.2.(;LED,KEY文件夾,從庫函數(shù)文件夾到USER文件夾;USER:FWLIB: CORE:main.c stm32f10 x_it.c system_stm32f10 x.c key.c led.c ;stm32f10 x_gpio.c stm32f10 x_rcc.c misc.c stm32f10 x_usart.c ; startup_stm32f10 x_md.s ;SYSTEM: delay.c sys.c usart.c .)啟動(dòng)工程。3.實(shí)
13、驗(yàn)內(nèi)容:1.2.3.初始化內(nèi)部SysTick 定時(shí)器,為系統(tǒng)分配時(shí)鐘等;初始化 LED,設(shè)置 PA0PA7,通用推挽輸出,2Mhz;初始化按鍵,設(shè)置 PB8-PB11,上拉輸入,10Mhz;4.按鍵按下時(shí),保存相應(yīng)鍵值并根據(jù)鍵值來控制相應(yīng) LED 的亮滅。按鍵的一端通過電阻接,另一端接地:則可以PB8PB11 引腳各自的狀態(tài)來檢測(cè) S1S4 按鍵是否按下。實(shí)驗(yàn)過程: 初始化按鍵,設(shè)置 PB8-PB11 為輸void Key_Cfg(void):GPIO_InitTypeDef key_gpio; /定義 I/O 變量RCC_APB2PeriphClockCmd(RCC_APB2Periph_G
14、PIOB, ENABLE); /使能端口B 時(shí)鐘/* 按鍵 I/O 配置 */key_gpio.GPIO_Pin= GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;/*上拉輸入:信號(hào)進(jìn)入此時(shí)的引腳電平為后加了一個(gè)上拉電阻,再經(jīng)過觸發(fā)器轉(zhuǎn)換成0/1 信號(hào),*/key_gpio.GPIO_Mode = GPIO_Mode_IPU; /上拉輸入(輸入時(shí)不必要配置速度)GPIO_Init(GPIOB, &key_gpio); GPIO_ReadInputDataBit 庫函數(shù)重定義:#define KEY1_STAGPIO_ReadInputDa
15、taBit(GPIOB, GPIO_Pin_8) /讀按鍵 Key1 狀態(tài)#define KEY_DN0 /按鍵按下#define KEY_UP1 /按鍵松開(KEY2,KEY3,KEY4 的設(shè)置同理) 主函數(shù)設(shè)置 while 循環(huán),實(shí)現(xiàn)功能:main(void) delay_init();LED_Cfg(); Key_Cfg(); /初始化while (1)/* 按鍵 Key1 和 Key3 */if (KEY1_STA = KEY_DN) | (KEY3_STA = KEY_DN) /檢測(cè)是否有按鍵按下 delay_ms(1); /延時(shí)消抖if (KEY1_STA = KEY_DN)| (
16、KEY3_STA = KEY_DN) /確認(rèn)是否按鍵按下 while(KEY1_STA = KEY_DN)| (KEY3_STA = KEY_DN); /等待按鍵 LED1_TOGGLE;/* 按鍵 Key2 和 Key4 */if (KEY2_STA = KEY_DN) | (KEY4_STA = KEY_DN)delay_ms(1);if (KEY2_STA = KEY_DN) | (KEY4_STA = KEY_DN) LED2_ON;while(KEY2_STA = KEY_DN) | (KEY4_STA = KEY_DN); LED2_OFF;(延時(shí)函數(shù)和 LED 的相關(guān)操作參見實(shí)驗(yàn)
17、一)測(cè)試:程序運(yùn)行成功后:按下 KEY1/KEY3,LED1 反轉(zhuǎn);按下 KEY2/KEY4,LED2開后熄滅。,松(如左圖)科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)通學(xué)院專業(yè):物聯(lián)網(wǎng)工程班級(jí):物聯(lián) 1601都圓圓學(xué)號(hào):41624624實(shí)驗(yàn)日期:2018 年7 月18日實(shí)驗(yàn)名稱: 外部中斷操作(按鍵)實(shí)驗(yàn)(三)實(shí)驗(yàn)?zāi)康模?.2.3.學(xué)會(huì) I/O 口位作為外部中斷輸入的方法;理解 I/O 口位作為外部中斷輸入的原理;使用 I/O 口位作為外部中斷輸入的功能,點(diǎn)亮/熄滅 LED 燈。實(shí)驗(yàn)材料:硬件準(zhǔn)備:1.2.3.4.5.STM32 最小系統(tǒng)板;流水燈模塊(發(fā)光二極管 8 個(gè),330電阻 8 個(gè),排針 19P,萬能板
18、一塊);按鍵模塊(按鍵 4 個(gè),1k電阻 4 個(gè));杜邦線 9 根;CH340(或 SWD 仿真器)。準(zhǔn)備:安裝 MDK5,并1.2.(;LED,KEY,EXTI文件夾,從庫函數(shù)文件夾到USER文件夾;USER:FWLIB: CORE:main.c stm32f10 x_it.c system_stm32f10 x.c key.c led.c ;stm32f10 x_gpio.c stm32f10 x_rcc.c misc.c stm32f10 x_usart.c stm32f10 x_exti.c ; startup_stm32f10 x_md.s ;SYSTEM: delay.c sys.
19、c usart.c .)啟動(dòng)工程。3.實(shí)驗(yàn)內(nèi)容:中斷:在現(xiàn)有程序 A 運(yùn)行的過程中,遇到一個(gè)優(yōu)先級(jí)更高的事件 B 需要處理,單片機(jī)就要暫停 A 去處理 B,B 處理完成后再回來繼續(xù)處理 A。1.2.3.4.5.初始化內(nèi)部SysTick 定時(shí)器,為系統(tǒng)分配時(shí)鐘等;初始化 LED,設(shè)置 PA0PA7,通用推挽輸出,2Mhz;初始化按鍵,設(shè)置 PB9,PB10,上拉輸入,10Mhz;設(shè)置 I/O 口與中斷線的關(guān)系,初始化線上中斷,配置中斷分組;編寫中斷服務(wù)函數(shù),通過 LED 燈表現(xiàn)中斷。實(shí)驗(yàn)過程: 初始化按鍵,設(shè)置 PB9,PB10 為輸void Key_Cfg(void):GPIO_InitTyp
20、eDef key_gpio; /定義 I/O 變量RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /使能端口B 時(shí)鐘/* 按鍵 I/O 配置 */key_gpio.GPIO_Pin= GPIO_Pin_9 | GPIO_Pin_10;/*上拉輸入:信號(hào)進(jìn)入此時(shí)的引腳電平為后加了一個(gè)上拉電阻,再經(jīng)過觸發(fā)器轉(zhuǎn)換成0/1 信號(hào),*/key_gpio.GPIO_Mode = GPIO_Mode_IPU; /上拉輸入GPIO_Init(GPIOB, &key_gpio);/*中斷線 0-4 每個(gè)中斷線對(duì)應(yīng)一個(gè)中斷函數(shù);中斷線 5-9 共用中斷函
21、數(shù) EXTI9_5_IRQHandler;中斷線 10-15 共用中斷函數(shù) EXTI15_10_IRQHandler。*/ GPIO_ReadInputDataBit 庫函數(shù)重定義:#define KEY1_STAGPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9) /讀按鍵 Key1 狀態(tài)(KEY2 的設(shè)置同理) 進(jìn)入 exti.c,設(shè)置中斷:void EXTIX_Init(void)EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphCloc
22、kCmd(RCC_APB2Periph_AFIO,ENABLE); /使能 AFIO 時(shí)鐘在中斷初始化函數(shù)中,需要初始化按鍵:Key_Cfg();在 STM32 中,PA1、PB1、PC1 等,是共用一條中斷線的,同樣,PA2、PB2、PC2 也是共用一條的,為此,需要用庫函數(shù)將中斷線分別綁在 PB 的兩個(gè)引腳上:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9);接下來用結(jié)構(gòu)體 EXTI_InitStructure 對(duì)其參數(shù)進(jìn)行定義:EXTI_InitStructure.EXTI_Line=EXTI_Line9; /中斷線 9E
23、XTI_InitStructure.EXTI_Mode = EXTI_Mode_errupt; /errupt 模式EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; /下降沿觸發(fā)EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure); /根據(jù) EXTI_InitStruct 中指定的參數(shù)初始化 EXTI 寄存器繼續(xù)設(shè)置 NVIC 中斷優(yōu)先級(jí):NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; /使
24、能按鍵所在的外部中斷通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0 x02; /搶占優(yōu)先級(jí) 2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0 x01; /子優(yōu)先級(jí) 1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /使能外部中斷通道 NVIC_Init(&NVIC_InitStructure); /根據(jù) NVIC_InitStruct 中指定的參數(shù)初始化NVIC 寄存器(PB10 的設(shè)置同理) 接下來編輯中斷服務(wù)函數(shù):v
25、oid EXTI9_5_IRQHandler(void) delay_ms(10); /消抖 if(KEY2_STA=0)LED2_ON; while(KEY2_STA=KEY_DN); LED2_OFF;EXTI_ClearITPendingBit(EXTI_Line9); /清除 Line9 上的中斷標(biāo)志(PB10 的設(shè)置同理) main 函數(shù)用 while 不斷循環(huán),以便讓中斷函數(shù)隨時(shí)請(qǐng)求運(yùn)行。main(void) NVIC_Configuration();/設(shè)置中斷優(yōu)先級(jí)分組 2:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); delay
26、_init();uart_init(9600);LED_Cfg();EXTIX_Init(); /初始化LED1_ON; /點(diǎn)亮 LED1 while(1)prf(OKn); delay_ms(1000);(延時(shí)函數(shù)和 LED 的相關(guān)操作參見實(shí)驗(yàn)一)測(cè)試:程序運(yùn)行成功后:LED1;按住 KEY2,LED2 亮;按住 KEY3,LED3 亮。若是調(diào)整,使KEY2 的搶占優(yōu)先級(jí)為 2; KEY3 的搶占優(yōu)先級(jí)為 3:按住 KEY2,LED2 亮,保持 KEY2 按下狀態(tài),之后按下 KEY3,LED3 亮;按住 KEY3,LED3 亮,保持 KEY3 按下狀態(tài),之后按下 KEY2,LED2 不亮;(
27、如圖)科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)通學(xué)院專業(yè):物聯(lián)網(wǎng)工程班級(jí):物聯(lián) 1601都圓圓學(xué)號(hào):41624624實(shí)驗(yàn)日期:2018年7 月18日實(shí)驗(yàn)名稱:串口輸入與輸出實(shí)驗(yàn)(四)實(shí)驗(yàn)?zāi)康模?.2.學(xué)會(huì)使用串口調(diào)試對(duì)單片機(jī)的調(diào)試;學(xué)會(huì)使用單片機(jī)的串口功能。實(shí)驗(yàn)材料:硬件準(zhǔn)備:1.2.3.STM32 最小系統(tǒng)板;杜邦線 9 根;CH340(或 SWD 仿真器)。準(zhǔn)備:安裝 MDK5,并1.(;USER:FWLIB: CORE:main.c stm32f10 x_it.c system_stm32f10 x.c ;stm32f10 x_gpio.c stm32f10 x_rcc.c misc.c stm32f10
28、x_usart.c ; startup_stm32f10 x_md.s ;SYSTEM: delay.c sys.c usart.c .)串口調(diào)試助手;啟動(dòng)工程。2.3.實(shí)驗(yàn)內(nèi)容:串口通信:顧名思義就是將一整條的內(nèi)容,切成一“串”來發(fā)送或接收。發(fā)送的是,循環(huán)如下過程:將字符串中的一個(gè)字符寫到一個(gè)寄存器中(此寄存器只能存一個(gè)字符),寫入后會(huì)自動(dòng)通過串口發(fā)送,發(fā)送結(jié)束再寫入下一個(gè)字符。接收的話,會(huì)直接裝入單片機(jī)緩沖區(qū)的一個(gè)字符型數(shù)組,由程序依次讀這個(gè)數(shù)組。1.2.3.4.串口時(shí)鐘使能和串口復(fù)位;串口初始化和參數(shù)設(shè)置;使能串口;編寫中斷服務(wù)函數(shù)。實(shí)驗(yàn)過程: 使用RCC_APB2PeriphClock
29、Cmd 進(jìn)行串口時(shí)鐘使能,同時(shí)為了避免一開始的異常情況,使能后進(jìn)行串口復(fù)位:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);/使能 USART1,GPIOA 時(shí)鐘 USART_DeInit(USART1); /復(fù)位串口 1 串口初始化:(在STM32 中:PA9 和PA10 分別作為USART1 的輸出口TXD 和輸GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDe
30、f NVIC_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; /PA9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /復(fù)用推挽輸出 GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化 PA9RXD)GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; /PA10GPIO_InitStructure.G
31、PIO_Mode = GPIO_Mode_IN_FLOATING; /浮空輸入 GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化 PA10本實(shí)驗(yàn)中,串口輸入通過串口中斷來實(shí)現(xiàn),所以要進(jìn)行優(yōu)先級(jí)配置: NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; /搶占優(yōu)先級(jí) 3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; /子優(yōu)先級(jí) 3 NVIC_Ini
32、tStructure.NVIC_IRQChannelCmd = ENABLE; /IRQ 通道使能 NVIC_Init(&NVIC_InitStructure); /根據(jù)指定的參數(shù)初始化 NVIC 寄存器 串口參數(shù)設(shè)置:USART_InitStructure.USART_BaudRate = bound; /一般設(shè)置為 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; /字長為 8 位數(shù)據(jù)格式USART_InitStructure.USART_Stits = USART_Stits_1; /一個(gè)停止位USART_
33、InitStructure.USART_Parity = USART_Parity_No; /無奇偶校驗(yàn)位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/無硬件數(shù)據(jù)流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /收發(fā)模式USART_Init(USART1, &USART_InitStructure); /初始化串口USART_ITConfig(USART1, USART_IT_RXNE, ENAB
34、LE); /開啟中斷 USART_Cmd(USART1, ENABLE); /使能串口 接下來編輯中斷服務(wù)函數(shù):(整個(gè)中斷服務(wù)函數(shù)就是確保傳輸?shù)耐暾裕y(tǒng)統(tǒng)被void USART1_IRQHandler(void) /串口 1 中斷服務(wù)程序u8 Res;到USART_RX_BUF 緩沖區(qū)中)#ifdef OS_TICKS_PER_SEC /如果時(shí)鐘節(jié)拍數(shù)定義了,說明要使用 ucosII 了.OSEnter(); #endifif(USART_GetITSus(USART1, USART_IT_RXNE) != RESET) /接收中斷(接收到的數(shù)據(jù)必須是 0 x0d 0 x0a 結(jié)尾)Res
35、=USART_ReceiveData(USART1);/(USART1-DR); /if(USART_RX_STA&0 x8000)=0) /接收未完成 if(USART_RX_STA&0 x4000) /接收到了 0 x0d接收到的數(shù)據(jù)if(Res!=0 x0a) USART_RX_STA=0; /接收錯(cuò)誤,重新開始else USART_RX_STA|=0 x8000; /接收完成了 else /還沒收到 0X0Dif(Res=0 x0d) USART_RX_STA|=0 x4000;elseUSART_RX_BUFUSART_RX_STA&0X3USART_RX_STA+;=Res ;if
36、(USART_RX_STA(USART_REC_LEN-1) USART_RX_STA=0;/接收數(shù)據(jù)錯(cuò)誤,重新開始接收#ifdef OS_TICKS_PER_SEC /如果時(shí)鐘節(jié)拍數(shù)定義了,說明要使用 ucosII 了.OSExit(); #endif main 函數(shù)用 while 循環(huán)使程序一直運(yùn)行:如果有輸入,則依次將緩沖區(qū)的內(nèi)容寫入 DR并發(fā)送出去;否則就過一段時(shí)間提示程序正在運(yùn)行main(void) u8 t;u8 len;u16 times=0;NVIC_Configuration();SystemInit(); delay_init();uart_init(9600); /初始化
37、while(1)if(USART_RX_STA&0 x8000) /如果有輸入 len=USART_RX_STA&0 x3 ; /得到此次接收到的數(shù)據(jù)長度 prf(rn 您發(fā)送的消息為:rn);for(t=0;tDR=USART_RX_BUFt; /依次寫入 DR 并發(fā)送 while(USART1-SR&0X40)=0); /等待發(fā)送結(jié)束prf(rnrn);/USART_RX_STA=0;else /否則times+; if(times%5000=0)換行prf(rn 串口實(shí)驗(yàn)rn);if(times%200=0)prf(請(qǐng)輸入數(shù)據(jù),以回車鍵結(jié)束rn); if(times%30=0)LED0=
38、!LED0;/閃爍 LED,提示系統(tǒng)正在運(yùn)行. delay_ms(10);(延時(shí)函數(shù)的相關(guān)操作參見實(shí)驗(yàn)一)測(cè)試:程序運(yùn)行成功后:調(diào)試助手的屏幕會(huì)顯示:發(fā)送給單片機(jī),單片機(jī)又自動(dòng)傳回的字符串。(如左圖)科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)通學(xué)院專業(yè):物聯(lián)網(wǎng)工程班級(jí):物聯(lián) 1601都圓圓學(xué)號(hào):41624624實(shí)驗(yàn)日期:2018 年7 月18日實(shí)驗(yàn)名稱:定時(shí)器中斷實(shí)驗(yàn)(五)實(shí)驗(yàn)?zāi)康?1.2.學(xué)會(huì)使用STM32 的通用定時(shí)器;結(jié)合中斷理解定時(shí)器的具體應(yīng)用。實(shí)驗(yàn)材料:硬件準(zhǔn)備:1.2.3.4.STM32 最小系統(tǒng)板;流水燈模塊(發(fā)光二極管 8 個(gè),330電阻 8 個(gè),排針 19P,萬能板一塊);杜邦線 9 根;CH34
39、0(或 SWD 仿真器)。準(zhǔn)備:安裝 MDK5,并1.2.(;LED,TIMER文件夾,從庫函數(shù)文件夾到USER文件夾;USER:FWLIB: CORE:main.c stm32f10 x_it.c system_stm32f10 x.c led.c timer.c ;stm32f10 x_gpio.c stm32f10 x_rcc.c misc.c stm32f10 x_usart.c stm32f10 x_tim.c ; startup_stm32f10 x_md.s ;SYSTEM: delay.c sys.c usart.c .)啟動(dòng)工程。3.實(shí)驗(yàn)內(nèi)容:1.2.3.4.5.初始化 LE
40、D,設(shè)置 PA0PA1,通用推挽輸出,50Mhz;初始化 TIM3;打開定時(shí)器中斷并設(shè)置優(yōu)先級(jí);TIM3 使能;編寫中斷服務(wù)函數(shù)。實(shí)驗(yàn)過程: 初始化按鍵,設(shè)置 PA0-PA1 為輸出口:void LED_Init(void)GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);/使,PB 端口時(shí)鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1; /PA0,PA1GPIO_In
41、itStructure.GPIO_Mode = GPIO_Mode_Out_PP; /通用推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; / 50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); /根據(jù)設(shè)定參數(shù)初始化 GPIO_SetBits(GPIOA,GPIO_Pin_0 |GPIO_Pin_1);/PA0,PA1 輸出高 TIM3 通用定時(shí)器的初始化:void TIM3_Init(u16 arr,u16 psc) TIM_TimeBaseInitTypeDef TIM_TimeBaseStr
42、ucture; NVIC_InitTypeDef NVIC_InitStructure;/使用 RCC_APB1PeriphClockCmd 使能 TIM3RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);/使用 TIM_TimeBaseInit 設(shè)置五個(gè)主要參數(shù)(PSC:時(shí)鐘預(yù)分頻數(shù);ARR:自動(dòng)重載周期值) TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_Prescaler =psc;TIM_TimeBaseStructure.TIM_ClockDivi
43、= 0; /時(shí)鐘分割TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /向上計(jì)數(shù)TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /根據(jù)指定參數(shù)初始化TIM3打開中斷并設(shè)置優(yōu)先級(jí): TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); /使能 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; /TIM3 中斷NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori
44、ty = 0; /搶占優(yōu)先級(jí) 0 級(jí)NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; /子優(yōu)先級(jí) 3 級(jí) NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /IRQ 通道被使能 NVIC_Init(&NVIC_InitStructure);/根據(jù)指定的參數(shù)初始化外設(shè) NVIC 寄存器 TIM3 使能:TIM_Cmd(TIM3, ENABLE);TIM3 中斷服務(wù)程序:void TIM3_IRQHandler(void)if (TIM_GetITSus(TIM3, TIM_IT_Update) !=
45、 RESET) /檢查中斷發(fā)生TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); /清除中斷待處理位LED1=!LED1; main 函數(shù): main(void) NVIC_Configuration(); delay_init();LED_Init();TIM3_Init(5000,7199); /初始化while(1) /LED0 的閃爍來表示程序不斷運(yùn)行LED0=!LED0;delay_ms(50);(延時(shí)函數(shù)和 LED 的相關(guān)操作參見實(shí)驗(yàn)一)測(cè)試:程序運(yùn)行成功后:LED1 以較快的速度不停閃爍,表示程序一直在循環(huán)運(yùn)行中;LED2 以較慢的速度變化狀
46、態(tài),每次變化表示時(shí)鐘中斷被觸發(fā)了一次。針對(duì) arr 和 psc 參數(shù):Psc:設(shè)置用來作為 TIM3 時(shí)鐘頻率除數(shù)的預(yù)分頻值;Arr:設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值二者越小,中斷發(fā)生越快(如圖)科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)通學(xué)院專業(yè):物聯(lián)網(wǎng)工程班級(jí):物聯(lián) 1601都圓圓學(xué)號(hào):41624624實(shí)驗(yàn)日期:2018 年7 月18日實(shí)驗(yàn)名稱:發(fā)生器的使用實(shí)驗(yàn)(六)實(shí)驗(yàn)?zāi)康模?.2.3.理解學(xué)會(huì)設(shè)置使用基本原理;輸出; 輸出三角波。實(shí)驗(yàn)材料:硬件準(zhǔn)備:1.2.3.4.STM32 最小系統(tǒng)板;流水燈模塊(發(fā)光二極管 8 個(gè),330電阻 8 個(gè),排針 19P,萬能板一塊);杜邦線 9 根;C
47、H340(或 SWD 仿真器)。準(zhǔn)備:安裝 MDK5,并;1.2.(LED,文件夾,從庫函數(shù)文件夾到USER文件夾;USER:FWLIB: CORE:main.c stm32f10 x_it.c system_stm32f10 x.c.c ;stm32f10 x_gpio.c stm32f10 x_rcc.c misc.c stm32f10 x_usart.c stm32f10 x_tim.c;startup_stm32f10 x_md.s ;SYSTEM: delay.c sys.c usart.c .)啟動(dòng)工程。3.實(shí)驗(yàn)內(nèi)容:1.2.3.4.5.開啟 TIM1 時(shí)鐘;初始化 PA8;初始化
48、 TIM1;使能 TIM1;修改 TIM1_CCR1 來控制占空比實(shí)驗(yàn)過程: 開啟 TIM1 時(shí)鐘:RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); 設(shè)置 PA8 為輸出口:(TIM1_CH1 通道使用 PA8 的復(fù)用功能作為輸出) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);/使能 GPIO 外設(shè)時(shí)鐘使能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; /PA8GPIO_InitStructure.GPIO_Mode = GPIO_Mod
49、e_AF_PP; /復(fù)用推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /50HZ GPIO_Init(GPIOA, &GPIO_InitStructure); 初始化 TIM1:void TIM1_Init(u16 arr,u16 psc)GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; TIM_OCInitTypeDefTIM_OCInitStructure;TIM_TimeBaseStructure.TIM_Per
50、iod = arr;TIM_TimeBaseStructure.TIM_Prescaler =psc;TIM_TimeBaseStructure.TIM_ClockDivi= 0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); /根據(jù)指定的參數(shù)初始化 TIM1 初始化 TIM1_CH1:CCR1 捕獲/比較寄存器:根據(jù)設(shè)置的極性不同,它可以一個(gè)變量,控制計(jì)數(shù)器中的數(shù)大于或小于這個(gè)變量:輸出脈沖,由此控制占空比。TIM_OCInitSt
51、ructure.TIM_OCMode = TIM_OCMode_2; /設(shè)置為2 模式TIM_OCInitStructure.TIM_OutputSe = TIM_OutputSe_Enable; /使能比較輸出TIM_OCInitStructure.TIM_Pulse = 0; /設(shè)置待裝入捕獲比較寄存器的脈沖值TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/輸出極性:TIM 輸出比較極性高TIM_OC1Init(TIM1, &TIM_OCInitStructure); /根據(jù)指定的參數(shù)初始化外設(shè) TIM1TIM_CtrlO
52、utputs(TIM1,ENABLE); /MOE 主輸出使能TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); /CH1 預(yù)裝載使能TIM_ARRPreloadConfig(TIM1, ENABLE); /使能 TIMx 在 ARR 上的預(yù)裝載寄存器使能 TIM1:TIM_Cmd(TIM1, ENABLE);(主函數(shù)中設(shè)置led0val 來控制占空比:pare1()有兩個(gè)參數(shù),第一個(gè)參數(shù)是定時(shí)器,第二個(gè)參數(shù)是一個(gè)小于 arr 的整數(shù),它與 arr 的比值就是占空比)main(void)u16 led0val=0;u8 dir=1;delay_i
53、nit(); /延時(shí)函數(shù)初始化TIM1_while(1)_Init(899,0); /頻率 80Khz,不分頻delay_us(500);if(dir)led0val+;else led0if(led0 if(led0val-;val300)dir=0; val=0)dir=1; pare1(TIM1,led0val);(延時(shí)函數(shù)和 LED 的相關(guān)操作參見實(shí)驗(yàn)一)測(cè)試:程序運(yùn)行成功后:PA8 連接了任意一個(gè) LED 之后,該 LED 呈現(xiàn)呼吸燈現(xiàn)象。(如左圖)科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)通學(xué)院專業(yè):物聯(lián)網(wǎng)工程班級(jí):物聯(lián) 1601都圓圓學(xué)號(hào):41624624實(shí)驗(yàn)日期:2018年7 月18日實(shí)驗(yàn)名稱:板上
54、串口 DMA 發(fā)送實(shí)驗(yàn)(七)實(shí)驗(yàn)?zāi)康模?.2.區(qū)分 DMA 和普通傳送;學(xué)會(huì)使用 DMA 傳輸數(shù)據(jù)。實(shí)驗(yàn)材料:硬件準(zhǔn)備:1.2.3.STM32 最小系統(tǒng)板;杜邦線 9 根;CH340(或 SWD 仿真器)。準(zhǔn)備:安裝 MDK5,并1.(;USER:FWLIB: CORE:main.c stm32f10 x_it.c system_stm32f10 x.c dma.c led.c ;stm32f10 x_gpio.c stm32f10 x_rcc.c misc.c stm32f10 x_usart.c stm32f10 x_dma.c; startup_stm32f10 x_md.s ;SYST
55、EM: delay.c sys.c usart.c .)串口調(diào)試助手;啟動(dòng)工程。2.3.實(shí)驗(yàn)內(nèi)容:DMA(即直接器):DMA 傳輸方式無需 CPU 直接控制傳輸,也沒有中斷處理方式那樣保留現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)的過程,通過硬件為 RAM 與 I/O 設(shè)備開辟一條直接傳送數(shù)據(jù)的通路,能使 CPU 的效率大為提高。STM32 擁有多 2 個(gè) DMA 控制器,每個(gè)控制器擁有多個(gè)通道,每個(gè)通道專門用來管理來自于一個(gè)或多個(gè)外設(shè)對(duì)器的請(qǐng)求,功能非常強(qiáng)大。1.2.3.4.5.使能 DMA 時(shí)鐘;初始化 DMA 通道 4;使能串口 DMA 發(fā)送;使能 DMA 通道 4; 查詢 DMA 傳輸狀態(tài)。實(shí)驗(yàn)過程: 使能DMA
56、:void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);DMA_DeInit(DMA_CHx); /DMA 通道 4 寄存器重設(shè)為缺省值dtr; /數(shù)據(jù)長度/使能 DMA 時(shí)鐘DMA_InitStructure.DMA_PeripheralBaseAddr = cpar; /外設(shè)DMA_InitStructure.DMA_MemoryBaseAddr = cmar; /內(nèi)存址址DMA_InitStru
57、cture.DMA_DIR = DMA_DIR_PeripheralDST; /數(shù)據(jù)傳輸方向:從內(nèi)存到外設(shè)DMA_InitStructure.DMA_BufferSize = cndtr; /DMA 緩存大小 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /外設(shè)地址寄存器不變 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /內(nèi)存地址寄存器遞增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_Perip
58、heralDataSize_Byte; /數(shù)據(jù)寬度:8 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; /數(shù)據(jù)寬度:8 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; /工作在正常緩存模式 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; /中優(yōu)先級(jí) DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; /不設(shè)置為內(nèi)存到內(nèi)存?zhèn)鬏?DMA_Init(DMA_CHx, &DMA_In
59、itStructure); /根據(jù)指定參數(shù)初始化相應(yīng)寄存器 使能串口的 DMA 功能:USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);DMA_Cmd(DMA_CHx, ENABLE);/使能所指示的通道 主函數(shù):const u8 TEXT_TO_SEND=科技大學(xué) DMA 串口實(shí)驗(yàn); /存字符串入 DMA 發(fā)送區(qū)#define TEXT_LENTHsizeof(TEXT_TO_SEND)-1 / TEXT_TO_SEND 字符串長度u8 SendBuffTEXT_LENTH+2; /發(fā)送緩存區(qū) main(void)u16 i; delay_init();
60、 uart_init(9600);LED_Cfg(); /初始化MYDMA_Config(DMA1_Channel4,(u32)&USART1-DR,(u32)SendBuff,TEXT_LENTH+2);/DMA1 通道 4,外設(shè)串口 1,器為 SendBuff,長度為 TEXT_LENTH+2for(i=0;iTEXT_LENTH;i+) /填充 ASCII 字符集數(shù)據(jù)SendBuffi=TEXT_TO_SENDi; /TEXT_TO_SEND 語句SendBuffTEXT_LENTH=0 x0d; SendBuffTEXT_LENTH+1=0 x0a; /回車換行while(1)USAR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 煤礦電工初級(jí)培訓(xùn)課件
- 醫(yī)學(xué)導(dǎo)論:生殖器皰疹防控課件
- 云計(jì)算系統(tǒng)配置要點(diǎn)解析
- 鋼結(jié)構(gòu)幕墻施工管理模式創(chuàng)新方案
- 性生理科普教學(xué)課件
- 蕪湖新區(qū)消防安全規(guī)劃
- 數(shù)學(xué)鬧鐘題庫及答案
- 2026年廣州醫(yī)療機(jī)構(gòu)內(nèi)部審計(jì)流程及面試題參考
- 2026年旅游行業(yè)服務(wù)標(biāo)準(zhǔn)導(dǎo)游崗位面試常見問題解析
- 2025年社區(qū)物業(yè)服務(wù)與管理手冊(cè)
- MBD技術(shù)應(yīng)用課件
- 汽車修理廠經(jīng)營方案
- 對(duì)現(xiàn)行高中地理新教材理解上的幾點(diǎn)困惑與思考 論文
- 重慶市豐都縣2023-2024學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題
- 美術(shù)教學(xué)中的跨學(xué)科教學(xué)策略
- mc尼龍澆鑄工藝
- 旅居養(yǎng)老可行性方案
- 燈謎大全及答案1000個(gè)
- 老年健康與醫(yī)養(yǎng)結(jié)合服務(wù)管理
- 1到六年級(jí)古詩全部打印
- 心包積液及心包填塞
評(píng)論
0/150
提交評(píng)論