案例講稿物聯(lián)1601_第1頁
案例講稿物聯(lián)1601_第2頁
案例講稿物聯(lián)1601_第3頁
案例講稿物聯(lián)1601_第4頁
案例講稿物聯(lián)1601_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2018 年物聯(lián)網(wǎng)實(shí)習(xí)學(xué)院:計(jì)通學(xué)院專業(yè):物聯(lián)網(wǎng)工程班級(講臺) :物聯(lián) 1601學(xué)號:41624627裝 訂 時(shí) 間:2018 年7 月18 日科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)算機(jī)與通信專業(yè):物聯(lián)網(wǎng)工程班級:物聯(lián) 1601:學(xué)號:41624627實(shí)驗(yàn)日期:2018年7 月18日實(shí)驗(yàn)名稱: I/O 口位輸出(流水燈)實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模?.結(jié)合MDK5,掌握STM32 的編程與調(diào)試步驟。2.能理解STM32數(shù)和寄存器編程的。3.學(xué)會使用I/O 口進(jìn)行輸出的方法。4.能看懂控制輸出的關(guān)鍵代碼。5.能獨(dú)立完成最小系統(tǒng)板與模塊間的硬件接線。實(shí)驗(yàn)材料:硬件準(zhǔn)備1. STM32 最小系統(tǒng)板一塊。2. 流水燈模塊(發(fā)光二極

2、管 8 個(gè),330電阻 8 個(gè),排針 9P,萬能板一塊)。3. 杜邦線 9 根。4. SWD 仿真器一個(gè)(或 CH340 串口線一根)。軟件準(zhǔn)備:1.前提已經(jīng)安裝好MDK5,并成功。2.打開“數(shù)”文件夾,將其中的“LED”文件夾。3.返回主目錄,打開“2. 流水燈”文件夾中的“USER”文件夾,粘貼。4.返回“2. 流水燈”文件夾,進(jìn)入“USER”文件夾啟動工程文件。實(shí)驗(yàn)內(nèi)容:1. 初始化內(nèi)部SysTick 定時(shí)器,為系統(tǒng)分配時(shí)鐘等。2. 初始化外設(shè),將 PA.0PA.7 引腳通過 void LED_Init(void)函數(shù)進(jìn)行初始化,將上述的引腳設(shè)置為通用的 I/O 口,推挽輸出。3. 循環(huán)

3、改變引腳的電平特性。8 個(gè) LED,采用共陽設(shè)計(jì),當(dāng)引腳輸出低電平時(shí),LED 燈被點(diǎn)亮;當(dāng)引腳輸出時(shí),LED 燈熄滅。在本實(shí)驗(yàn)中,使用數(shù)和寄存器兩種方法來設(shè)置 I/O 口的高低電平。實(shí)驗(yàn)過程: 初始化LED,設(shè)置PA0-PA7 為輸出口:void LED_Cfg(void)/GPIO_InitTypeDef 是一個(gè)結(jié)構(gòu)體,用于向GPIO 的寄存器里面寫數(shù)據(jù)(pin,Speed,Mode)GPIO_InitTypeDef led_gpio;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);開啟外設(shè)時(shí)鐘外設(shè)時(shí)鐘掛在 APB2 總線上的/ 使能

4、端口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;led_gpio.GPIO_Mode= GPIO_Mode_Out_PP;led_gpio.GPIO_Speed = GPIO_Speed_2MHz;/ 通用推挽輸出/ 2MHzGPIO_Init(GPIOA, &led_gpio);/將上述數(shù)據(jù)寫入寄存器中,GPIOA 是一個(gè)指針/

5、* 配置完成后關(guān)閉所有 LED */LED1_OFF; LED2_OFF; LED3_OFF; LED4_OFF; LED5_OFF;LED6_OFF;LED7_OFF;LED8_OFF; 設(shè)置LED 的輸出狀態(tài),并進(jìn)行#define,使其更容易使用。/* 控制 LED1-LED4(直接操作寄存器) */#define LED1_TOGGLEGPIOA-ODR = GPIO_Pin_0/ PA0 輸出相反狀態(tài) - LED1 狀態(tài)反轉(zhuǎn)是異或功能,剛好取反#define LED1_OFFGPIOA-BSRR = GPIO_Pin_0/ PA0 輸出- LED1 關(guān);BSRR端口位設(shè)置清除寄存器,同

6、一個(gè)值賦給兩個(gè)寄存器的含義不同#define LED1_ONGPIOA-BRR= GPIO_Pin_0/ PA0 輸出低電平LED1 開#define LED2_TOGGLE#define LED2_OFF #define LED2_ONGPIOA-ODR = GPIO_Pin_1GPIOA-BSRR = GPIO_Pin_1 GPIOA-BRR= GPIO_Pin_1/ LED2 狀態(tài)反轉(zhuǎn)/ LED2 關(guān)/ LED2 開#define LED3_TOGGLE#define LED3_OFF #define LED3_ONGPIOA-ODR = GPIO_Pin_2GPIOA-BSRR = G

7、PIO_Pin_2 GPIOA-BRR= GPIO_Pin_2#define LED4_TOGGLE#define LED4_OFF #define LED4_ONGPIOA-ODR = GPIO_Pin_3GPIOA-BSRR = GPIO_Pin_3 GPIOA-BRR= GPIO_Pin_3/* 控制 LED5-LED8(調(diào)用數(shù)) */#define LED5_OFF#define LED5_ONGPIO_SetBits(GPIOA, GPIO_Pin_4)GPIO_ResetBits(GPIOA, GPIO_Pin_4)/ PA4 輸出- LED5 關(guān)/ PA4 輸出低電平 - LED

8、5 開#define LED6_OFF#define LED6_ONGPIO_SetBits(GPIOA, GPIO_Pin_5)GPIO_ResetBits(GPIOA, GPIO_Pin_5)#define LED7_OFF#define LED7_ONGPIO_SetBits(GPIOA, GPIO_Pin_6)GPIO_ResetBits(GPIOA, GPIO_Pin_6)#define LED8_OFF#define LED8_ONGPIO_SetBits(GPIOA, GPIO_Pin_7)GPIO_ResetBits(GPIOA, GPIO_Pin_7) 在主函數(shù)中設(shè)置whil

9、e 循環(huán),使其循環(huán)開關(guān)。while (1)LED1_ON;Delay_ms(200); LED1_OFF; LED2_ON;Delay_ms(200); LED2_OFF; LED3_ON;Delay_ms(200); LED3_OFF; LED4_ON;Delay_ms(200); LED4_OFF; LED5_ON;Delay_ms(200); LED5_OFF; LED6_ON;Delay_ms(200); LED6_OFF; LED7_ON;Delay_ms(200); LED7_OFF; LED8_ON;Delay_ms(200); LED8_OFF;在此過程中需要實(shí)現(xiàn)基于STM32

10、 內(nèi)部SysTick 定時(shí)器的精確延時(shí),分別實(shí)現(xiàn)了SysTick 定時(shí)器的初始化,以及毫秒(ms)、微妙(us)級別的精確延時(shí)。#include delay.hssic u8fac_us = 0;/us 延時(shí)倍乘數(shù)ic u16 fac_ms = 0;/ms 延時(shí)倍乘數(shù)void delay_init()/初始化延遲函數(shù),SYSTICK 的時(shí)鐘固定為HCLK 時(shí)鐘的 1/8SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);/選擇外部時(shí)鐘 HCLK/8fac_us=SystemCoreClock/8000000;/為系統(tǒng)時(shí)鐘的 1/8 fac_

11、ms=(u16)fac_us*1000;/非 ucos 下,代表每個(gè) ms 需要的 systick 時(shí)鐘數(shù)void 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 ;dotemp=SysTick-CTRL;while(temp&0 x01&!(temp&(1CTRL&=SysTick_CTRL_ENABLE_Msk;/開始倒數(shù)/關(guān)閉計(jì)數(shù)器SysTick-VAL =0X00;/清

12、空計(jì)數(shù)器/SysTick-LOAD 為 24 位寄存器,所以,最大延時(shí)為:/nms=0 x*8*1000/SYSCLKvoid delay_ms(u16 nms)/SYSCLKu32 temp;為Hz,nms為 ms,對 72M 條件下,nmsLOAD=(u32)nms*fac_ms;/時(shí)間加載(SysTick-LOAD 為 24bit)SysTick-VAL =0 x00;/清空計(jì)數(shù)器SysTick-CTRL|=SysTick_CTRL_ENABLE_Msk ;dotemp=SysTick-CTRL;while(temp&0 x01&!(temp&(1CTRL&=SysTick_CTRL_E

13、NABLE_Msk;/開始倒數(shù)/關(guān)閉計(jì)數(shù)器SysTick-VAL =0X00;/清空計(jì)數(shù)器測試:程序成功運(yùn)行后,8 個(gè) LED 燈會循環(huán)依次點(diǎn)亮熄滅。科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)算機(jī)與通信專業(yè):物聯(lián)網(wǎng)工程班級:物聯(lián) 1601:學(xué)號:41624627實(shí)驗(yàn)日期:2018年7 月18日實(shí)驗(yàn)名稱: I/O 口位輸入(按鍵)實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模?.學(xué)習(xí)GPIO 口輸出的基本操作。2.掌握如何設(shè)定GPIO 口為通用 I/O 口。3.掌握利用內(nèi)部SysTick 定時(shí)器實(shí)現(xiàn)精確延時(shí)。實(shí)驗(yàn)材料:1. STM32 最小系統(tǒng)板一塊。2.流水燈模塊。3.普通按鍵模塊。4.蜂鳴器模塊。5. S SWD 仿真器一個(gè)(或 CH340 串

14、口線一根)。實(shí)驗(yàn)內(nèi)容:1. 初始化內(nèi)部SysTick 定時(shí)器、LED,為系統(tǒng)分配時(shí)鐘等。2. 將 PB.8PB.11 引腳通過 Scan_Key_Configuration()函數(shù)進(jìn)行初始化,將上述的引腳設(shè)置為通用的 I/O 口,上拉輸入。3. 通過直接操作數(shù)方式或位帶操作方式來PB.8PB.11 引腳狀態(tài)來檢測按鍵是否按下。當(dāng)有按下按鍵時(shí),保存相應(yīng)鍵值。主函數(shù)中根據(jù)鍵值來控制相應(yīng)的LED 亮滅。實(shí)驗(yàn)過程: 初始化 LED 燈、按鍵和蜂鳴器,設(shè)置控制 LED 和蜂鳴器的管腳為推挽輸出,檢測按鍵的管腳為上拉輸入。在這里設(shè)置 PA0-PA7 為 LED 燈的輸出口,不過用不了這么多,設(shè)置PB0 控

15、制蜂鳴器,PB8-PB11 為按鍵的輸。void LED_Cfg(void)GPIO_InitTypeDef led_gpio; 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;led_gpio.GPIO_Mode= GPIO_Mode_Out_P

16、P;led_gpio.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &led_gpio);/ 通用推挽輸出/ 2MHz/* 配置完成后關(guān)閉所有 LED */LED1_OFF; LED2_OFF; LED3_OFF; LED4_OFF; LED5_OFF; LED6_OFF; LED7_OFF;LED8_OFF;void Bell_Cfg(void)GPIO_InitTypeDef bell_gpio; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);/* 蜂鳴器 I/O 配置 */bell

17、_gpio.GPIO_Pin= GPIO_Pin_0;bell_gpio.GPIO_Mode= GPIO_Mode_Out_PP;bell_gpio.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOB, &bell_gpio);/ 通用推挽輸出/ 2MHz/* 配置完成后關(guān)閉蜂鳴器 */BELL_OFF;void Key_Cfg(void)GPIO_InitTypeDef key_gpio; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);/* 按鍵 I/O 配置 */key_gpio.GPIO_

18、Pin= GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;key_gpio.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOB, &key_gpio);/ 上拉輸入 在他們所對應(yīng)的頭文件 key.h bell.h led.h 中,將幾個(gè)比較重要的數(shù)進(jìn)行#define 重定義,方便編程使用。讀按鍵使用GPIO_ReadInputDataBit數(shù)。#define KEY1_STA#define KEY2_STA #define KEY3_STA #define KEY4_STAGPIO_ReadInputDat

19、aBit(GPIOB, GPIO_Pin_8) / 讀按鍵 Key1 狀態(tài)GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9) / 讀按鍵 Key2 狀態(tài) GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10) / 讀按鍵 Key3 狀態(tài) GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) / 讀按鍵 Key4 狀態(tài)還是使用 GPIO_SetBits 和 GPIO_ResetBits數(shù)來對控制蜂鳴器的管腳置 1 和 0。#define BELL_ON#define BELL_OFF #define BELL

20、_TOGGLEGPIO_SetBits(GPIOB, GPIO_Pin_0)GPIO_ResetBits(GPIOB, GPIO_Pin_0) GPIOB-ODR = GPIO_Pin_0/ 蜂鳴器響/ 蜂鳴器停/ 狀態(tài)反轉(zhuǎn)至于LED,可以參考流水燈實(shí)驗(yàn),使用 GPIO_SetBits 和GPIO_ResetBits數(shù)來控制,在這里就不再解釋。下面開始進(jìn)入主程序,要使用while 循環(huán)檢測按鍵是否有按下,然后執(zhí)行相應(yīng)的操作。在此過程中還需要進(jìn)行消抖,即檢測到按鍵按下后,要等一會再次檢測,避免因按鍵抖動導(dǎo)致的電位變化,引起相應(yīng)操作。while (1)/* 按鍵 Key1 和 Key3 */if

21、(KEY1_STA = KEY_DN) | (KEY3_STA = KEY_DN)/ 檢測是否有按鍵按下Delay_ms(1);/ 延時(shí)消抖if (KEY1_STA = KEY_DN)while (KEY1_STA = KEY_DN); LED1_TOGGLE;else if (KEY3_STA = KEY_DN)while (KEY3_STA = KEY_DN); BELL_TOGGLE;/ 確認(rèn)是否按鍵 Key1 按下/ 等待按鍵/ 確認(rèn)是否按鍵 Key3 按下/ 等待按鍵/* 按鍵 Key2 和 Key4 */if (KEY2_STA = KEY_DN) | (KEY4_STA = KE

22、Y_DN)/ 檢測是否有按鍵按下Delay_ms(1);if (KEY2_STA = KEY_DN)LED2_ON;while (KEY2_STA = KEY_DN); LED2_OFF;else if (KEY4_STA = KEY_DN)BELL_ON;while (KEY4_STA = KEY_DN); BELL_OFF;/ 延時(shí)消 抖/ 確認(rèn)是否按鍵 Key2 按下/ 確認(rèn)是否按鍵 Key4 按下消抖的過程中需要使用延時(shí)函數(shù)。不過這次沒有用到內(nèi)部定時(shí)器,而是使用了簡單的循環(huán)進(jìn)行計(jì)算延時(shí)。void Delay_ms(u16_t u16_Time_ms)u16_t i, j;/ 循環(huán)計(jì)數(shù)變

23、量for (i = 0; i u16_Time_ms; i+)for (j = 0; j DR);/接收到的數(shù)據(jù)if(USART_RX_STA&0 x8000)=0)/接收未完成if(USART_RX_STA&0 x4000)/接收到了 0 x0dif(Res!=0 x0a)USART_RX_STA=0;/接收錯誤,重新開始else USART_RX_STA|=0 x8000;else /還沒收到 0X0D/接收完成了if(Res=0 x0d)USART_RX_STA|=0 x4000;else USART_RX_BUFUSART_RX_STA&0X3USART_RX_STA+;=Res ;i

24、f(USART_RX_STA(USART_REC_LEN-1)USART_RX_STA=0;/ 接收數(shù)據(jù)錯誤,重新開始接收#ifdef OS_TICKS_PER_SEC OSExit();#endif/如果時(shí)鐘節(jié)拍數(shù)定義了,說明要使用 ucosII 了.在 main 函數(shù)中,使用 while 循環(huán)使程序一直運(yùn)行, 借助接收狀態(tài)標(biāo)記USART_RX_STA 的值,判斷是否有輸入以及它的長度值。如果有輸入,則依次將緩沖區(qū)的內(nèi)容寫入 DR 并發(fā)送出去。否則就過一段時(shí)間提示程序正在運(yùn)行。while(1)if(USART_RX_STA&0 x8000)len=USART_RX_STA&0 x3 ;/得到

25、此次接收到的數(shù)據(jù)長度 prf(rn 您發(fā)送的消息為:rn);for(t=0;tDR=USART_RX_BUFt;while(USART1-SR&0X40)=0);/等待發(fā)送結(jié)束prf(rnrn);/USART_RX_STA=0;換行elsetimes+;if(times%5000=0)prf(rn 串口實(shí)驗(yàn)rn);if(times%200=0)prf(請輸入數(shù)據(jù),以回車鍵結(jié)束rn); if(times%30=0)LED0=!LED0;/閃爍 LED,提示系統(tǒng)正在運(yùn)行. delay_ms(10);把程序到單片機(jī),將 CH340 的 USB 端接電腦,接單片機(jī)的 5V,低電平接單片機(jī)的 GND,T

26、XD 接單片機(jī)的 PA10,RXD 接單片機(jī)的 PA9.打開串口調(diào)試助手,設(shè)置好程序中相同的波特率,隨便輸入一個(gè)字符串,進(jìn)行調(diào)試。測試:調(diào)試助手的屏幕會顯示你發(fā)送給單片機(jī),單片機(jī)又自動傳回的字符串。科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)算機(jī)與通信專業(yè):物聯(lián)網(wǎng)工程班級:物聯(lián) 1601:學(xué)號:41624627實(shí)驗(yàn)日期:2018年7 月18日實(shí)驗(yàn)名稱: 定時(shí)器中斷實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模?. 學(xué)會使用STM32 的通用定時(shí)器。2. 結(jié)合中斷理解定時(shí)器的具體應(yīng)用。實(shí)驗(yàn)材料:1. STM32 最小系統(tǒng)板一塊。2. LED 燈 1 個(gè),杜邦線 2 根。3. SWD 仿真器一個(gè)(或 CH340 串口線一根)。實(shí)驗(yàn)內(nèi)容:1. TIM3

27、時(shí)鐘使能。2.初始化定時(shí)器參數(shù),設(shè)置自動重裝值,分頻系數(shù),計(jì)數(shù)方式等。3.設(shè)置定時(shí)器允許更新中斷。4.定時(shí)器中斷優(yōu)先級設(shè)置。5.允許定時(shí)器工作,也就是使能定時(shí)器。6.編寫中斷服務(wù)函數(shù)。實(shí)驗(yàn)過程:先做一點(diǎn)零碎的工作,去led.c 中設(shè)置LED 燈初始化函數(shù),以供正式實(shí)驗(yàn)使用。本實(shí)驗(yàn)中只要LED0 和LED1 就可以,LED0 用來表示程序正在運(yùn)行,LED1 則用來表示定時(shí)器中斷的操作。void LED_Init(void)GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2P

28、eriph_GPIOB, ENABLE);/使,PB 端口時(shí)鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);GPIOA.8GPIO_SetBits(GPIOA,GPIO_Pin_0);/LED0-PA.0 端口配置/推挽輸出/IO 口速度為 50MHz/ 根 據(jù) 設(shè) 定 參 數(shù) 初 始 化

29、/PA.8 輸出高GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;挽輸出GPIO_Init(GPIOA, &GPIO_InitStructure); 50MHzGPIO_SetBits(GPIOA,GPIO_Pin_1);/LED1-PA.1 端口配置, 推/ 推挽輸出 , IO 口速度為/PD.2 輸出高進(jìn)入time.c 中,設(shè)置TIM3 通用定時(shí)器的初始化函數(shù)。首 先 要 使 用 函 數(shù) RCC_APB1PeriphClockCmd 來 使 能 TIM3 , 再 用 TIM_TimeBaseInit 函數(shù)來設(shè)置五個(gè)主要參數(shù)。在這個(gè)函數(shù)中,參數(shù)的設(shè)置也是通過

30、結(jié)構(gòu)體TIM_TimeBaseInitTypeDef 來進(jìn)行的。和其他初始化函數(shù)不同的是,時(shí)鐘初始化函數(shù)中,會有兩個(gè)參數(shù):arr 和psc。PSC 是用來設(shè)置分頻系數(shù)n 的,該系數(shù)對時(shí)鐘進(jìn)行分頻,也就是系統(tǒng)時(shí)鐘頻率的n 分之一,然后提供給計(jì)數(shù)器,作為計(jì)數(shù)器的時(shí)鐘。arr 是設(shè)置自動重載計(jì)數(shù)周期值,從 0 計(jì)數(shù)到ARR 的值,就觸發(fā)一次中斷,然后再重新開始計(jì)數(shù)。該段代碼如下:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /時(shí)鐘使能TIM_TimeBaseStructure.TIM_Period = arr; /設(shè)置在下一個(gè)更新事件裝入活

31、動的自動重裝載寄存器周期的值計(jì)數(shù)到 5000 為 500msTIM_TimeBaseStructure.TIM_Prescaler =psc; /設(shè)置用來作為 TIMx 時(shí)鐘頻率除數(shù)的預(yù)分頻值10Khz 的計(jì)數(shù)頻率TIM_TimeBaseStructure.TIM_ClockDivi= 0; /設(shè)置時(shí)鐘分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;/TIM 向上計(jì)數(shù)模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /根據(jù) TIM_TimeB

32、aseInitStruct 中指定的參數(shù)初始化TIMx 的時(shí)間基數(shù)使用定時(shí)器中斷,就必須和使用其他中斷一樣,打開中斷并設(shè)置優(yōu)先級。這段代碼非常類似,只不過這里改成了時(shí)鐘中斷。TIM_ITConfig(/使能或者失能指定的 TIM 中斷TIM3, /TIM2TIM_IT_Update , ENABLE/使能);NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;/TIM3 中斷 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;/先占優(yōu)先級 0 級NVIC_InitStructure.NVI

33、C_IRQChannelSubPriority = 3;/從優(yōu)先級 3 級 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /IRQ 通道被使能 NVIC_Init(&NVIC_InitStructure);/根據(jù)NVIC_InitStruct 中指定的參數(shù)初始化外設(shè)NVIC 寄存器剛才的步驟中是設(shè)置好了 TIM3,最后還要用 TIM_Cmd(TIM3, ENABLE)函數(shù)來打開 TIM3,這點(diǎn)一定不能忘記,很多人設(shè)置結(jié)束后忘記打開,導(dǎo)致時(shí)鐘中斷完全不能用,檢查半天才發(fā)現(xiàn)這里有一個(gè) BUG。到這里才算是完成 TIM3 的初始化函數(shù)。下面來編寫 T

34、IM3 中斷服務(wù)程序。該服務(wù)程序的很簡單: 使用TIM_GetITSus 函數(shù)檢查時(shí)鐘中斷是否發(fā)生,如果發(fā)生了,就操作一下 LED1,然后清除中斷標(biāo)志位。void TIM3_IRQHandler(void)/TIM3 中斷if (TIM_GetITSus(TIM3, TIM_IT_Update) != RESET) /檢查指定的TIM 中斷發(fā)生與否:TIM 中斷源TIM_ClearITPendingBit(TIM3, TIM_IT_Update);/清除 TIMx 的中斷待處理位:TIM 中斷源LED1=!LED1;main 函數(shù)中,需要設(shè)置一下中斷分組,并且調(diào)用 LED 和定時(shí)器的初始化函數(shù)

35、。接下來的事情就是while(1)循環(huán),讓程序永遠(yuǎn)運(yùn)行下去,這個(gè)可以用LED0 的閃爍來表示。測試:后,可以看到LED0 以較快的速度不停閃爍,表示程序一直在喜愛運(yùn)行中。LED1 則以較慢的速度變化狀態(tài)(從亮變滅,或從滅變亮),每次變化表示時(shí)鐘中斷被觸發(fā)了一次。科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)算機(jī)與通信專業(yè):物聯(lián)網(wǎng)工程班級:物聯(lián) 1601:學(xué)號:41624627實(shí)驗(yàn)日期:2018年7 月18日實(shí)驗(yàn)名稱:發(fā)生器的使用實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模?.理解(脈沖寬度調(diào)制)的基本原理。2.學(xué)會設(shè)置輸出,了解參數(shù)影響。3.使用輸出三角波。實(shí)驗(yàn)材料:1. STM32 最小系統(tǒng)板一塊。2. LED 燈 1 個(gè),杜邦線 2 根。3.

36、SWD 仿真器一個(gè)(或 CH340 串口線一根)。實(shí)驗(yàn)內(nèi)容:1.開啟TIM1 時(shí)鐘,配置PA8 為復(fù)用輸出。2.設(shè)置TIM1 的 ARR 和PSC。3.設(shè)置TIM1_CH1 的模式及通道方向, 使能TIM1 的 CH1 輸出。4.使能TIM1。5.設(shè)置MOE 輸出,使能輸出。6.修改TIM1_CCR1 來控制占空比。實(shí)驗(yàn)過程:先開啟TIM1 的時(shí)鐘,這點(diǎn)相信大家看了這么多代碼,應(yīng)該明白了。這里還要配置 PA8 為復(fù)用輸出,這是因?yàn)?TIM1_CH1 通道將使用 PA8 的復(fù)用功能作為輸出。因?yàn)镻A8 是復(fù)用輸出,所以也需要使8 的時(shí)鐘,接下來PA8 還需要普通的設(shè)置一下。RCC_APB2Per

37、iphClockCmd(RCC_APB2Periph_TIM1, ENABLE);/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);/使能 GPIO 外設(shè)時(shí)鐘使能/設(shè)置該引腳為復(fù)用輸出功能,輸出 TIM1 CH1 的GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; /TIM_CH1脈沖波形GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/復(fù)用推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO

38、_Init(GPIOA, &GPIO_InitStructure);本身就是定時(shí)器產(chǎn)生的,本次實(shí)驗(yàn)選用TM1 定時(shí)器,這是一個(gè)高級定時(shí)器,設(shè)置方法和之前的 TM3 很相似,只不過必要的參數(shù)多了 1 個(gè)。同樣的,在這里用結(jié)構(gòu)體來設(shè)置。TIM_TimeBaseStructure.TIM_Period = arr; /設(shè)置在下一個(gè)更新事件裝入活動的自動重裝載寄存器周期的值80KTIM_TimeBaseStructure.TIM_Prescaler =psc; /設(shè)置用來作為 TIMx 時(shí)鐘頻率除數(shù)的預(yù)分頻值不分頻TIM_TimeBaseStructure.TIM_ClockDivi= 0; /設(shè)置時(shí)

39、鐘分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;/TIM 向上計(jì)數(shù)模式TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); /根據(jù) TIM_TimeBaseInitStruct 中指定的參數(shù)初始化TIMx 的時(shí)間基數(shù)除了定時(shí)器實(shí)驗(yàn)里介紹的arr 和psc 兩個(gè)寄存器(平時(shí)也是變量名)外,在這里要認(rèn)識一下 CCR1 捕獲/比較寄存器。根據(jù)設(shè)置的極性不同,它可以一個(gè)變量,控制計(jì)數(shù)器中的數(shù)大于或小于這個(gè)變量使,輸出脈沖,由此控制占空比。接下來,要設(shè)置 T

40、IM1_CH1 為模式(默認(rèn)是凍結(jié)的),因?yàn)榈?LED 都是低電平亮,而希望當(dāng) CCR1 的值小的時(shí)候,LED 就暗,CCR1 值大的時(shí)候,LED 就亮,所以要通過配置 TIM1_CCMR1 的相關(guān)位來控制TIM1_CH1的 模 式 。 在數(shù) 中 ,通 道 設(shè) 置 是 通 過 函 數(shù)TIM_OC1Init()TIM_OC4Init()來設(shè)置的,不同的通道的設(shè)置函數(shù)不一樣,這里我們使用的是通道 1,所以使用的函數(shù)是 TIM_OC1Init()。TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_2; /選擇定時(shí)器模式:TIM 脈沖寬度調(diào)制模式 2TIM_OCI

41、nitStructure.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ù)TIM_OCInitStruct 中指定的參數(shù)初始化外設(shè) TIMx回到主函數(shù)中,設(shè)置一個(gè)變量led0val 來控制占空比。這里要認(rèn)識一下pare1(

42、)數(shù),它有兩個(gè)參數(shù),第一個(gè)參數(shù)是定時(shí)器,第二個(gè)參數(shù)是一個(gè)小于arr 的整數(shù),它與arr 的比值就是占空比。main(void)u16 led0val=0;u8 dir=1; delay_init();/延時(shí)函數(shù)初始化TIM1_while(1)_Init(899,0);/不分頻。頻率=72000/(899+1)=80Khzdelay_us(500);if(dir)led0val+;else led0if(led0 if(led0val-;val300)dir=0; val=0)dir=1; pare1(TIM1,led0val);測試:LED 以正極接 3.3V,負(fù)極接 STM32 的PA8,可

43、以觀察到LED 亮度循環(huán)變化的呼吸燈現(xiàn)象。科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)算機(jī)與通信專業(yè):物聯(lián)網(wǎng)工程班級:物聯(lián) 1601:學(xué)號:41624627實(shí)驗(yàn)日期:2018 年7 月18日實(shí)驗(yàn)名稱: 板上串口DMA 發(fā)送實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模?. 區(qū)分DMA 和普通傳送方式的區(qū)別。2. 學(xué)會使用DMA 進(jìn)行數(shù)據(jù)傳輸,體會使用DMA 的優(yōu)點(diǎn)。實(shí)驗(yàn)材料:1. STM32 最小系統(tǒng)板一塊。2. CH340 串口線一根。實(shí)驗(yàn)內(nèi)容:1.使能DMA 時(shí)鐘。2.初始化DMA 通道 4 參數(shù)。3.使能串口DMA 發(fā)送。4.使能DMA1 通道 4,啟動傳輸。5.查詢DMA 傳輸狀態(tài)。實(shí)驗(yàn)過程:因?yàn)樯婕皶r(shí)序問題,肯定是要對DMA 進(jìn)行時(shí)鐘使能

44、的。調(diào)用函數(shù)初始化DMA 的時(shí)候,需要用到三個(gè)參數(shù):DMA 通道及其外設(shè)為串口、器,數(shù)據(jù)長度。接下來,需要用結(jié)構(gòu)體DMA_InitStructure 來配置DMA。該結(jié)構(gòu)體的變量較多,比較重要的有:DMA_PeripheralBaseAddr 用來設(shè)置 DMA 傳輸?shù)耐庠O(shè)址;數(shù) DMA_MemoryBaseAddr 為內(nèi)存址,也就是存放 DMA 傳輸數(shù)據(jù)的內(nèi)存地址;DMA_DIR 設(shè)置數(shù)據(jù)傳輸方向,決定是從外設(shè)數(shù)據(jù)到內(nèi)存還送從內(nèi)存數(shù)據(jù)發(fā)送到外設(shè),也就是外設(shè)是源地還是目的地;DMA_Priority 是中斷的優(yōu)先級。其他的都是一些關(guān)于數(shù)據(jù)長度等具體方面的操作,有可以探討一下。RCC_AHBPer

45、iphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /使能 DMA 傳輸DMA_DeInit(DMA_CHx);dtr;/將 DMA 的通道 1 寄存器重設(shè)為缺省值DMA_InitStructure.DMA_PeripheralBaseAddr = cpar;/DMA 外設(shè) ADC址DMA_InitStructure.DMA_MemoryBaseAddr = cmar;/DMA 內(nèi)存址DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;/數(shù)據(jù)傳輸方向,從內(nèi)存到外設(shè)DMA_InitStructure.DMA_Buffe

46、rSize = cndtr;/DMA 通道的 DMA 緩存的大小發(fā)送DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;/外設(shè)地址寄存器不變DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;/內(nèi)存地址寄存器遞增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;/ 數(shù)據(jù)寬度為 8 位DMA_InitStructure.DMA_MemoryDataSize = DMA_M

47、emoryDataSize_Byte; /數(shù)據(jù)寬度為 8 位 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;/工作在正常緩存模式 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; /DMA 通道 x 擁有中優(yōu)先級 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;/DMA 通道 x 沒有設(shè)置為內(nèi)存到內(nèi)存?zhèn)鬏擠MA_Init(DMA_CHx, &DMA_InitStructure);/ 根據(jù) DMA_InitStruct 中指定的參數(shù)初始化DMA 的通道 U

48、SART1_Tx_DMA_Channel 所標(biāo)識的寄存器在主函數(shù)中,要使能串口的DMA 功能:USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);使能串口 DMA 后,在使用 DMA 的時(shí)候,要使能通道,這個(gè)是在 DMA 的調(diào)用函數(shù)中進(jìn)行的。DMA_Cmd(DMA_CHx, ENABLE);/使能 USART1 TX DMA1 所指示的通道m(xù)ain.c 中設(shè)置一個(gè)字符串,將其存入 DMA 的發(fā)送區(qū)中。DMA 的發(fā)送址以及長度在第一步中都有設(shè)置,現(xiàn)在可以直接用了。const u8 TEXT_TO_SEND=科技大學(xué) DMA 串口實(shí)驗(yàn);for(i=0;iTEXT

49、_LENTH;i+)/填充 ASCII 字符集數(shù)據(jù)SendBuffi=TEXT_TO_SENDi;/TEXT_TO_SEND 語句SendBuffTEXT_LENTH=0 x0d; /換行符占 2 個(gè)字符SendBuffTEXT_LENTH+1=0 x0a;在主函數(shù)中循環(huán)輸出。注意在實(shí)際過程中,發(fā)出傳輸命令后可以去做一些別的事,結(jié)束之后再回來檢查有沒有傳輸完成。在本實(shí)驗(yàn)中就不過多演示。while(1)USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);MYDMA_Enable(DMA1_Channel4);/開始一次 DMA 傳輸!/等待 DMA 傳輸完成,

50、此時(shí)來做另外一些事,點(diǎn)燈/實(shí)際應(yīng)用中,傳輸數(shù)據(jù)期間,可以執(zhí)行另外的任務(wù)while(1)if(DMA_GetFlagSus(DMA1_FLAG_TC4)!=RESET)/等待通道 4 傳輸完成DMA_ClearFlag(DMA1_FLAG_TC4);/清除通道 4 傳輸完成標(biāo)志break;delay_ms(100);CH340 線連接電腦和單片機(jī),打開串口調(diào)試助手,注意設(shè)置波特率為 9600。測試:CH340 接線參考串口通信實(shí)驗(yàn),打開調(diào)試助手后,每秒會自動接收一條信息,完全一樣??萍即髮W(xué)實(shí)驗(yàn)學(xué)院:計(jì)算機(jī)與通信專業(yè):物聯(lián)網(wǎng)工程班級:物聯(lián) 1601:學(xué)號:41624627實(shí)驗(yàn)日期:2018年7 月

51、18日實(shí)驗(yàn)名稱: ADC 模數(shù)轉(zhuǎn)換實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模?.了解ADC 工作原理。2.掌握ADC 的配置方法。3.結(jié)合串口,了解ADC 常用的使用方法。實(shí)驗(yàn)材料:1. STM32 最小系統(tǒng)板一塊。2. CH340 串口線一根。3. 單獨(dú)的杜邦線一根(接電壓信號用)。實(shí)驗(yàn)內(nèi)容:1.開啟PA 口和ADC1 時(shí)鐘,設(shè)置PA1 為模擬輸入。2.復(fù)位ADC1,同時(shí)設(shè)置 ADC1 分頻因子。3.初始化ADC1 參數(shù),設(shè)置ADC1 的工作模式以及規(guī)則序列的相關(guān)信息。4.使能ADC 并校準(zhǔn)。5.ADC 值。實(shí)驗(yàn)過程:ADC 通道 1 在PA1 上,所以,先要使能 PORTA 的時(shí)鐘,然后設(shè)置 PA1 為模擬輸入。使能

52、 GPIOA 和 ADC 時(shí)鐘用 RCC_APB2PeriphClockCmd 函數(shù),設(shè)置PA1 的輸入方式,使用GPIO_Init 函數(shù)即可。開啟ADC1 時(shí)鐘之后,要復(fù)位ADC1,將 ADC1 的全部寄存器重設(shè)為缺省值之后就可以通過 RCC_CFGR 設(shè)置 ADC1 的分頻因子。分頻因子要確保ADC1 的時(shí)鐘(ADCCLK)不要超過 14Mhz,否則容易失靈。RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE );/使能 ADC1 通道時(shí)鐘RCC_ADCCLKConfig(RCC_PCLK2_D

53、iv6);過 14M/PA1 作為模擬通道輸入引腳/設(shè)置 ADC 分頻因子 6 72M/6=12,ADC 最大時(shí)間GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure);/模擬輸入引腳下面開始用結(jié)構(gòu)體 ADC_InitStructure 進(jìn)行 ADC1 的模式配置,設(shè)置單次轉(zhuǎn)換模式、觸發(fā)方式選擇、數(shù)據(jù)對齊方式等都在這一步實(shí)現(xiàn)。同時(shí)還要設(shè)置ADC1規(guī)則序列的相關(guān)信息,這里只有一個(gè)通道,并且是單次轉(zhuǎn)換的,所

54、以設(shè)置規(guī)則序列中通道數(shù)為 1。ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;/ADC 工作模式:ADC1 和 ADC2工作在獨(dú)立模式 000ADC_InitStructure.ADC_ScanConvMode = DISABLE;/模數(shù)轉(zhuǎn)換工作在單通道模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;式/模數(shù)轉(zhuǎn)換工作在單次轉(zhuǎn)換模ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; / 轉(zhuǎn)換由軟件而不是外部

55、觸發(fā)啟動ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;/ADC 數(shù)據(jù)右對齊ADC_InitStructure.ADC_NbrOfChannel = 1;/順序進(jìn)行規(guī)則轉(zhuǎn)換的 ADC 通道的數(shù)目ADC_Init(ADC1, &ADC_InitStructure); /根據(jù) ADC_InitStruct 中指定的參數(shù)初始化外設(shè) ADCx的寄存器使能并校準(zhǔn)ADC1 是非常重要的,不像其他固件,ADC 的使能速度較慢,并且不校準(zhǔn)的話會使結(jié)果有很大偏差。在這里需要一段確定使能和校準(zhǔn)完畢的代碼。ADC_Cmd(ADC1, ENABLE); /使

56、能指定的 ADC1ADC_ResetCalibration(ADC1);/使能復(fù)位校準(zhǔn)while(ADC_GetResetCalibrationSus(ADC1); /等待復(fù)位校準(zhǔn)結(jié)束ADC_StartCalibration(ADC1);while(ADC_GetCalibrationS/開啟 AD 校準(zhǔn)us(ADC1);/等待校準(zhǔn)結(jié)束設(shè)置結(jié)束后,就可以用數(shù)來ADC 的值了。要做的就是設(shè)置規(guī)則序列 1 里面的通道,采樣順序,以及通道的采樣周期,然后啟動 ADC 轉(zhuǎn)換。在轉(zhuǎn)換結(jié)束后,ADC 轉(zhuǎn)換結(jié)果值。ADC_RegularChannelConfig()函數(shù)可以設(shè)置規(guī)則序列通道以及采樣周期,再用

57、 ADC_SoftwareStartConvCmd() 函數(shù)來從軟件開啟 ADC , 之后可以用ADC_GetConverValue()函數(shù)獲取轉(zhuǎn)換結(jié)果。這里采用了多次采樣取平均值,使結(jié)果更加準(zhǔn)確。u16 Get_Adc(u8 ch)/設(shè)置指定 ADC 的規(guī)則組通道,一個(gè)序列,采樣時(shí)間ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); /ADC1,ADC通道,采樣時(shí)間為 239.5 周期ADC_SoftwareStartConvCmd(ADC1, ENABLE);/使能指定的ADC1 的軟件轉(zhuǎn)換啟動功能while

58、(!ADC_GetFlagSreturn ADC_GetConverus(ADC1, ADC_FLAG_EOC );/等待轉(zhuǎn)換結(jié)束Value(ADC1); /返回最近一次 ADC1 規(guī)則組的轉(zhuǎn)換結(jié)果u16 Get_Adc_Average(u8 ch,u8 times)u32 temp_val=0; u8 t;for(t=0;ttimes;t+)temp_val+=Get_Adc(ch); delay_ms(5);return temp_val/times;這次照例要用串口發(fā)送結(jié)果給電腦,不過不用傳統(tǒng)方法和 DMA,這里可以直接用PRF 在串口助手打印,和普通的C 語言一樣。main(void)

59、u16 adcx;float temp; delay_init(); uart_init(9600); Adc_Init(); while(1)/延時(shí)函數(shù)初始化/串口初始化為 9600/ADC 初始化adcx=Get_Adc_Average(ADC_Channel_1,10);prf(讀到的 ADC 值是%drn,adcx); temp=(float)adcx*(3.3/4096); adcx=temp;prf(測得的電壓為%f 伏rnrn,temp); delay_ms(500);測試:CH340 接線參考串口通信實(shí)驗(yàn),PA1 連接 3.3V,打開調(diào)試助手后,隔一段時(shí)間會收到單片機(jī)的測試值。

60、科技大學(xué)實(shí)驗(yàn)學(xué)院:計(jì)算機(jī)與通信專業(yè):物聯(lián)網(wǎng)工程班級:物聯(lián) 1601:學(xué)號:41624627實(shí)驗(yàn)日期:2018年7 月18日實(shí)驗(yàn)名稱: I/O 口組輸出(掃描數(shù)碼管)實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模?. 理解數(shù)碼管顯示字形的原理。2. 理解數(shù)碼管位選掃描的原理。實(shí)驗(yàn)材料:硬件準(zhǔn)備:1. STM32 最小系統(tǒng)板一塊。2. 數(shù)碼管模塊。3. SWD 仿真器一個(gè)(或 CH340 串口線一根)。軟件準(zhǔn)備:1. MDK5。實(shí)驗(yàn)內(nèi)容:1.關(guān)閉SWD 調(diào)試功能。2.初始化I/O 口,并進(jìn)行時(shí)鐘使能。3.設(shè)置數(shù)碼管位選字形和段碼字形。4.設(shè)置主函數(shù),位選輸出相應(yīng)字形。實(shí)驗(yàn)過程:本實(shí)驗(yàn)要用到 PA13、PA14,而這兩個(gè)管腳是 S

溫馨提示

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

評論

0/150

提交評論