stm32學(xué)習(xí)筆記(狼牙整理)_第1頁(yè)
stm32學(xué)習(xí)筆記(狼牙整理)_第2頁(yè)
stm32學(xué)習(xí)筆記(狼牙整理)_第3頁(yè)
stm32學(xué)習(xí)筆記(狼牙整理)_第4頁(yè)
stm32學(xué)習(xí)筆記(狼牙整理)_第5頁(yè)
已閱讀5頁(yè),還剩65頁(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、學(xué)習(xí)stm32的筆記了,寫(xiě)的比較亂,不過(guò)比較詳細(xì),有興趣的朋友一起學(xué)習(xí)啦,共同進(jìn)步流水燈#include "led.h"#include "delay.h"#include "rcc.h" int main(void) int i; RCC_Configuration();delay_init(); LED_Init(); while(1)GPIO_SetBits(GPIOB,GPIO_Pin_5);GPIO_SetBits(GPIOD,GPIO_Pin_6);GPIO_SetBits(GPIOD,GPIO_Pin_3);delay_

2、ms(1000);delay_ms(1000); #include "rcc.h"void RCC_Configuration(void) SystemInit();/設(shè)置系統(tǒng)時(shí)鐘為72MHZ時(shí)鐘控制寄存器(RCC_CR) 偏移地址: 0x00 復(fù)位值: 0x000 XX83(10000011),X代表未定義位7:3 由軟件寫(xiě)入來(lái)調(diào)整內(nèi)部高速時(shí)鐘,它們被疊加在HSICAL5:0數(shù)值上。這些位在HSICAL7:0的基礎(chǔ)上,讓用戶可以輸入一個(gè)調(diào)整數(shù)值,根據(jù)電壓和溫度的變化調(diào)整內(nèi)部HSI RC振蕩器的頻率。默認(rèn)數(shù)值為16(10000),可以把HSI調(diào)整到8MHz±1%;

3、每步HSICAL的變化調(diào)整約40kHz。位2 保留,始終讀為0。HSIRDY:內(nèi)部高速時(shí)鐘就緒標(biāo)志(Internal high-speed clock ready flag) 位1 由硬件置1來(lái)指示內(nèi)部8MHz振蕩器已經(jīng)穩(wěn)定。在HSION位清零后,該位需要6個(gè)內(nèi)部8MHz振蕩器周期清零。0:內(nèi)部8MHz振蕩器沒(méi)有就緒;1:內(nèi)部8MHz振蕩器就緒。HSION:內(nèi)部高速時(shí)鐘使能(Internal high-speed clock enable) 位0 由軟件置1或清零。當(dāng)從待機(jī)和停止模式返回或用作系統(tǒng)時(shí)鐘的外部4-16MHz振蕩器發(fā)生故障時(shí),該位由硬件置1來(lái)啟動(dòng)內(nèi)部8MHz的RC振蕩器。當(dāng)內(nèi)部8M

4、Hz振蕩器被直接或間接地用作或被選擇將要作為系統(tǒng)時(shí)鐘時(shí),該位不能被清零。0:內(nèi)部8MHz振蕩器關(guān)閉;1:內(nèi)部8MHz振蕩器開(kāi)啟。在STM32中,有五個(gè)時(shí)鐘源,為HSI、HSE、LSI、LSE、PLL。HSI是高速內(nèi)部時(shí)鐘,RC振蕩器,頻率為8MHz。HSE是高速外部時(shí)鐘,可接石英/陶瓷諧振器,或者接外部時(shí)鐘源,頻率范圍為4MHz16MHz。 LSI是低速內(nèi)部時(shí)鐘,RC振蕩器,頻率為40kHz。LSE是低速外部時(shí)鐘,接頻率為32.768kHz的石英晶體。PLL為鎖相環(huán)倍頻輸出,其時(shí)鐘輸入源可選擇為HSI/2、HSE或者HSE/2。倍頻可選擇為216倍,但是其輸出頻率最大不得超過(guò)72MH

5、z。其中40kHz的LSI(低速內(nèi)部時(shí)鐘)供獨(dú)立看門(mén)狗IWDG使用,另外它還可以被選擇為實(shí)時(shí)時(shí)鐘RTC的時(shí)鐘源。另外,實(shí)時(shí)時(shí)鐘RTC的時(shí)鐘源還可以選 擇LSE(低速外部時(shí)鐘),或者是HSE(高速外部時(shí)鐘)的128分頻。RTC的時(shí)鐘源通過(guò)RTCSEL1:0來(lái)選擇。STM32中有一個(gè)全速功能的USB模塊,其串行接口引擎需要一個(gè)頻率為48MHz的時(shí)鐘源。該時(shí)鐘源只能從PLL輸出端獲取,可以選擇為1.5分頻或者 1分頻,也就是,當(dāng)需要使用USB模塊時(shí),PLL必須使能,并且時(shí)鐘頻率配置為48MHz或72MHz。()另外,STM32還可以選擇一個(gè)時(shí)鐘信號(hào)輸出到MCO腳(PA8)上,可以選擇為PLL輸出的2

6、分頻、HSI、HSE、或者系統(tǒng)時(shí)鐘。系統(tǒng)時(shí)鐘SYSCLK最大頻率為72MHz,它是供STM32中絕大部分部件工作的時(shí)鐘源。系統(tǒng)時(shí)鐘可由PLL、HSI或者HSE提供輸出,并且它通過(guò)AHB分頻器分頻后送給各模塊使用,AHB分頻器可選擇1、2、4、8、16、64、128、256、512分頻。其中AHB分頻器輸出的時(shí)鐘送給5大模塊使用:、送給AHB總線、內(nèi)核、內(nèi)存和DMA使用的HCLK時(shí)鐘。、分頻后送給STM32芯片的系統(tǒng)定時(shí)器時(shí)鐘(Systick=Sysclk/8=9Mhz)、直接送給Cortex的自由運(yùn)行時(shí)鐘(free running clock)FCLK?!続RMJISHU注:FCLK 為處理器

7、的自由振蕩的處理器時(shí)鐘,用來(lái)采樣中斷和為調(diào)試模塊計(jì)時(shí)。在處理器休眠時(shí),通過(guò)FCLK 保證可以采樣到中斷和跟蹤休眠事件。 Cortex-M3內(nèi)核的“自由運(yùn)行時(shí)鐘(free running clock)”FCLK?!白杂伞北憩F(xiàn)在它不來(lái)自系統(tǒng)時(shí)鐘HCLK,因此在系統(tǒng)時(shí)鐘停止時(shí)FCLK 也繼續(xù)運(yùn)行。FCLK和HCLK 互相同步。FCLK 是一個(gè)自由振蕩的HCLK。FCLK 和HCLK 應(yīng)該互相平衡,保證進(jìn)入Cortex-M3 時(shí)的延遲相同?!?、送給APB1分頻器。APB1分頻器可選擇1、2、4、8、16分頻,其輸出一路供APB1外設(shè)使用(PCLK1,最大頻率36MHz),另一路送給定時(shí)器(Timer)

8、2、3、4倍頻器使用。該倍頻器可選擇1或者2倍頻,時(shí)鐘輸出供定時(shí)器2、3、4使用。、送給APB2分頻器。APB2分頻器可選擇1、2、4、8、16分頻, 其輸出一路供APB2外設(shè)使用(PCLK2,最大頻率72MHz),另一路送給定時(shí)器(Timer)1倍頻器使用。該倍頻器可選擇1或者2倍頻,時(shí)鐘輸出 供定時(shí)器1使用。另外,APB2分頻器還有一路輸出供ADC分頻器使用,分頻后送給ADC模塊使用。ADC分頻器可選擇為2、4、6、8分頻。以上提到3種時(shí)鐘Fclk、Hclk和Pclk,簡(jiǎn)單解釋如下:Fclk為供給CPU內(nèi)核的時(shí)鐘信號(hào),我們所說(shuō)的cpu主頻為XXXXMHz,就是指的這個(gè)時(shí)鐘信號(hào),相應(yīng)的,1/

9、Fclk即為cpu時(shí)鐘周期;Hclk為優(yōu)秀的高性能總線(AHB bus peripherals)供給時(shí)鐘信號(hào)(AHB為advanced high-performance bus);HCLK :AHB總線時(shí)鐘,由系統(tǒng)時(shí)鐘SYSCLK 分頻得到,一般不分頻,等于系統(tǒng)時(shí)鐘,HCLK是高速外設(shè)時(shí)鐘,是給外部設(shè)備的,比如內(nèi)存,flash。Pclk為優(yōu)秀的高性能外設(shè)總線(APB bus peripherals)供給時(shí)鐘信號(hào)(其中APB為advanced peripherals bus)。在以上的時(shí)鐘輸出中,有很多是帶使能控制的,例如AHB總線時(shí)鐘、內(nèi)核時(shí)鐘、各種APB1外設(shè)、APB2外設(shè)等等。當(dāng)需要使用某

10、模塊時(shí),記得一定要先使能對(duì)應(yīng)的時(shí)鐘。需要注意的是定時(shí)器的倍頻器,當(dāng)APB的分頻為1時(shí),它的倍頻值為1,否則它的倍頻值就為2。連接在APB1(低速外設(shè))上的設(shè)備有:電源接口、備份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看門(mén)狗、Timer2、Timer3、Timer4。注意:USB模塊雖然需要一個(gè)單獨(dú)的48MHz時(shí)鐘信號(hào),但它應(yīng)該不是供USB模塊工作的時(shí)鐘,而只是提供給串行接口引擎(SIE)使用的時(shí)鐘。USB模塊工作的時(shí)鐘應(yīng)該是由APB1提供的。連接在APB2(高速外設(shè))上的設(shè)備有:UART1、SPI1、Timer1、ADC1、ADC2、所有普通IO口(PA

11、PE)、第二功能IO口。STM32的HCLK與FCLK關(guān)系圖"/caption下圖是STM32用戶手冊(cè)中的時(shí)鐘系統(tǒng)結(jié)構(gòu)圖(位于STM32F103CDE_DS_CH_V5.pdf的第14頁(yè),或者STM32F10XXX參考手冊(cè)_CN.pdf的第47頁(yè)),通過(guò)該圖可以從"STM32的時(shí)鐘系統(tǒng)結(jié)構(gòu)圖"總體上掌握STM32的時(shí)鐘系統(tǒng)。static u8 fac_us=0;/us延時(shí)倍乘數(shù)static u16 fac_ms=0;/ms延時(shí)倍乘數(shù)/初始化延遲函數(shù)/SYSTICK的時(shí)鐘固定為HCLK時(shí)鐘的1/8/SYSCLK:系統(tǒng)時(shí)鐘void delay_init() SysTi

12、ck_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);/選擇外部時(shí)鐘 HCLK/8fac_us=SystemCoreClock/8000000;/為系統(tǒng)時(shí)鐘的1/8 fac_ms=(u16)fac_us*1000;/代表每個(gè)ms需要的systick時(shí)鐘數(shù) /延時(shí)nms/注意nms的范圍/SysTick->LOAD為24位寄存器,所以,最大延時(shí)為:/nms<=0xffffff*8*1000/SYSCLK/SYSCLK單位為Hz,nms單位為ms/對(duì)72M條件下,nms<=1864 void delay_ms(u16 nms) u32 t

13、emp; SysTick->LOAD=(u32)nms*fac_ms;/時(shí)間加載(SysTick->LOAD為24bit)SysTick->VAL =0x00; /清空計(jì)數(shù)器SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; /開(kāi)始倒數(shù) dotemp=SysTick->CTRL;while(temp&0x01&&!(temp&(1<<16);/等待時(shí)間到達(dá) SysTick->CTRL&=SysTick_CTRL_ENABLE_Msk; /關(guān)閉計(jì)數(shù)器 :按位取反運(yùn)算符SysTic

14、k->VAL =0X00; /清空計(jì)數(shù)器 SysTick->CTRL 的各位定義如圖 5.1.1.1 所示: Systick的時(shí)鐘頻率為f=sysclk/8Hz,則周期T=8/sysclk S,一次計(jì)數(shù)所花的時(shí)間ms=8/sysclk/1000,systick是24位計(jì)數(shù)器,從0記到0xffffff溢出了,則一次延時(shí)時(shí)間不能超過(guò):8/sysclk/1000Xffffff=1864.135ms,就是這樣算的void LED_Init(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Pe

15、riph_GPIOB|RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_5); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

16、GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_SetBits(GPIOD,GPIO_Pin_6); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_SetBits(GPIOD,GPIO_Pin_3); GPIOB的地址=0x0C00+0x10000+0x40000000=0x40010C00看寄存器版本:1左移3為:1000GPIOB->CRL&=0XFF0FFFFF; 的結(jié)果為44044444GPI

17、OB->CRL|=0X00300000;的結(jié)果為44344444GPIOB->ODR|=1<<5; 串口int main(void)/* USART1 配置模式為 115200 8-N-1,中斷接收 */USART1_Config();NVIC_Configuration();printf("rn 這是一個(gè)串口中斷接收回顯實(shí)驗(yàn) rn");printf("rn 請(qǐng)?jiān)诔?jí)終端或者串口調(diào)試助手輸入字符 rn");for(;)下位機(jī)加上奇偶校驗(yàn)位會(huì)出現(xiàn)亂碼串行數(shù)據(jù)在傳輸過(guò)程中,由于干擾可能引起信息的出錯(cuò),例如,傳輸字符E,其各位為:010

18、0,0101=45HD7 D0由于干擾,可能使位變?yōu)?,這種情況,我們稱為出現(xiàn)了“誤碼”。我們把如何發(fā)現(xiàn)傳輸中的錯(cuò)誤,叫“檢錯(cuò)”。發(fā)現(xiàn)錯(cuò)誤后,如何消除錯(cuò)誤,叫“糾錯(cuò)”。最簡(jiǎn)單的檢錯(cuò)方法是“奇偶校驗(yàn)”,即在傳送字符的各位之外,再傳送1位奇/偶校驗(yàn)位??刹捎闷嫘r?yàn)或偶校驗(yàn)。奇校驗(yàn):所有傳送的數(shù)位(含字符的各數(shù)位和校驗(yàn)位)中,“1”的個(gè)數(shù)為奇數(shù),如:1 0110,01010 0110,0001偶校驗(yàn):所有傳送的數(shù)位(含字符的各數(shù)位和校驗(yàn)位)中,“1”的個(gè)數(shù)為偶數(shù),如:1 0100,01010 0100,0001奇偶校驗(yàn)?zāi)軌驒z測(cè)出信息傳輸過(guò)程中的部分誤碼(1位誤碼能檢出,2位及2位以上誤碼不能檢出),

19、同時(shí),它不能糾錯(cuò)。在發(fā)現(xiàn)錯(cuò)誤后,只能要求重發(fā)。但由于其實(shí)現(xiàn)簡(jiǎn)單,仍得到了廣泛使用。有些檢錯(cuò)方法,具有自動(dòng)糾錯(cuò)能力。如循環(huán)冗余碼(CRC)檢錯(cuò)等。在VC串口通信技術(shù)網(wǎng)的RS232 DB-9針串口引腳定義一文中提到CD、DTR、DSR、RTS、CTS、RI這幾個(gè)信號(hào)引腳,可能有許多人都不太清楚它們的含義,這幾個(gè)信號(hào)是用來(lái)作硬件流控制的,通俗的講就是用來(lái)控制什么時(shí)候可以發(fā)數(shù)據(jù),什么時(shí)候可以收數(shù)據(jù)的。有些DIY串口線的文章也到只需要三根線(GND、RXD、TXD),這種線沒(méi)有用到硬件流控制,雙方不知道什么時(shí)候可以發(fā),什么時(shí)候有數(shù)據(jù),兩邊的設(shè)備就必須用變通過(guò)的方法,比如規(guī)定雙方的握手協(xié)議(比如發(fā)送特殊的

20、字符或字符串來(lái)代表一個(gè)數(shù)據(jù)包的開(kāi)始或結(jié)束),這樣才不容易丟失數(shù)據(jù)。有了硬件流控制,可以在沒(méi)有軟件協(xié)議的情況下更容易保證數(shù)據(jù)的完整性。下面詳細(xì)闡述一下硬件流控制的原理。RTS   我可以接受數(shù)據(jù),請(qǐng)求發(fā)送數(shù)據(jù)給我CTS   允許我發(fā)送數(shù)據(jù)給你?DTR,告訴別人自己上電了,可以操作了當(dāng)一端 準(zhǔn)備接受數(shù)據(jù)時(shí), 它將RTS置高,如果它不能接受更多的數(shù)據(jù)時(shí), 它將RTS置低。對(duì)于PC機(jī), 或者non-modem這樣的終端設(shè)備, 它的CTS線與另外一端設(shè)備的RTS線相連接。Linux系統(tǒng)只支持RTS/CTS硬件流控制 (當(dāng)然可以自己寫(xiě)一個(gè)特殊驅(qū)動(dòng)來(lái)支持DTR/DSR

21、硬件流控制)如果一端準(zhǔn)備停止接受, 它就將RTS置低, 意思是停止發(fā)送。如果處理完畢,可以接受更多數(shù)據(jù)時(shí),將RTS置高。其實(shí)硬件流控是還是需要靠軟件來(lái)實(shí)現(xiàn)的,在軟件里必須判斷這此信號(hào)的狀態(tài)才能真正實(shí)現(xiàn)流控制,之所以強(qiáng)調(diào)“硬件”二字,僅僅是因?yàn)橛布骺靥峁┝擞糜诹髁壳闆r指示的硬件連線(CTS/RTS),并不是說(shuō),你只要把線連上,硬件就能自己流控。如果軟件不支持,光連上RTS和CTS是沒(méi)有用的。軟件流控不需要額外的連線, 只需要TxD和RxD, 在數(shù)據(jù)通道上發(fā)送特殊的流量控制字符來(lái)實(shí)現(xiàn)。Windows API函數(shù)里的DCB結(jié)構(gòu)里有關(guān)于硬件流控制的選擇開(kāi)關(guān),DCB.fOutxCtsFlow = TR

22、UE 表示DTE的CTS信號(hào)在關(guān)閉狀態(tài)下, DTE將不能發(fā)送數(shù)據(jù), WriteFile() 會(huì)處于Pending狀態(tài)。/ 重定向c庫(kù)函數(shù)printf到USART1int fputc(int ch, FILE *f)/* 發(fā)送一個(gè)字節(jié)數(shù)據(jù)到USART1 */USART_SendData(USART1, (uint8_t) ch);/* 等待發(fā)送完畢 */while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) = RESET);return (ch);/ 重定向c庫(kù)函數(shù)scanf到USART1int fgetc(FILE *f)/* 等待串口1輸入數(shù)據(jù)

23、 */while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) = RESET);return (int)USART_ReceiveData(USART1);我們以前在VC6.0中編程時(shí),包含include<stdio.h>頭文件之后,調(diào)用printf()函數(shù)后可以向控制臺(tái)傳輸(打?。┮贿B串字符等。 若要在STM32上也想用printf()函數(shù)向指定的設(shè)備上傳輸(打印)一串?dāng)?shù)據(jù)的話,可以“重定向這個(gè)C庫(kù)(stdio)printf()函數(shù)”來(lái)實(shí)現(xiàn)。 比如將其重定向到USART1上,即:printf()函數(shù)要輸出的數(shù)據(jù)通過(guò)串口USART1發(fā)

24、送出去,通過(guò)串口助手可以查看。 重定向后的優(yōu)點(diǎn): 可以像在VC6.0里面使用printf()函數(shù)在控制臺(tái)輸出數(shù)據(jù)和控制符之類的一樣,通過(guò)串口將其發(fā)送,對(duì)以后調(diào)試程序帶來(lái)很大的便利。 寫(xiě)字符函數(shù)fputcfputc函數(shù)的功能是把一個(gè)字符寫(xiě)入指定的文件中,函數(shù)調(diào)用的形式為:fputc(字符量,文件指針); 其中,待寫(xiě)入的字符量可以是字符常量或變量,例如:fputc('a',fp);其意義是把字符a寫(xiě)入fp所指向的文件中。對(duì)于fputc函數(shù)的使用也要說(shuō)明幾點(diǎn):1) 被寫(xiě)入的文件可以用寫(xiě)、讀寫(xiě)、追加方式打開(kāi),用寫(xiě)或讀寫(xiě)方式打開(kāi)一個(gè)已存在的文件時(shí)將清除原有的文件內(nèi)容,

25、寫(xiě)入字符從文件首開(kāi)始。如需保留原有文件內(nèi)容,希望寫(xiě)入的字符以文件末開(kāi)始存放,必須以追加方式打開(kāi)文件。被寫(xiě)入的文件若不存在,則創(chuàng)建該文件。2) 每寫(xiě)入一個(gè)字符,文件內(nèi)部位置指針向后移動(dòng)一個(gè)字節(jié)。3) fputc函數(shù)有一個(gè)返回值,如寫(xiě)入成功則返回寫(xiě)入的字符,否則返回一個(gè)EOF??捎么藖?lái)判斷寫(xiě)入是否成功。字符讀寫(xiě)函數(shù)是以字符(字節(jié))為單位的讀寫(xiě)函數(shù)。 每次可從文件讀出或向文件寫(xiě)入一個(gè)字符。1. 讀字符函數(shù)fgetcfgetc函數(shù)的功能是從指定的文件中讀一個(gè)字符,函數(shù)調(diào)用的形式為:字符變量=fgetc(文件指針);例如:ch=fgetc(fp);其意義是從打開(kāi)的

26、文件fp中讀取一個(gè)字符并送入ch中。對(duì)于fgetc函數(shù)的使用有以下幾點(diǎn)說(shuō)明:1) 在fgetc函數(shù)調(diào)用中,讀取的文件必須是以讀或讀寫(xiě)方式打開(kāi)的。2) 讀取字符的結(jié)果也可以不向字符變量賦值,例如:fgetc(fp);但是讀出的字符不能保存。3) 在文件內(nèi)部有一個(gè)位置指針。用來(lái)指向文件的當(dāng)前讀寫(xiě)字節(jié)。在文件打開(kāi)時(shí),該指針總是指向文件的第一個(gè)字節(jié)。使用fgetc 函數(shù)后,該位置指針將向后移動(dòng)一個(gè)字節(jié)。 因此可連續(xù)多次使用fgetc函數(shù),讀取多個(gè)字符。應(yīng)注意文件指針和文件內(nèi)部的位置指針不是一回事。文件指針是指向整個(gè)文件的,須在程序中定義說(shuō)明,只要不重新

27、賦值,文件指針的值是不變的。文件內(nèi)部的位置指針用以指示文件內(nèi)部的當(dāng)前讀寫(xiě)位置,每讀寫(xiě)一次,該指針均向后移動(dòng),它不需在程序中定義說(shuō)明,而是由系統(tǒng)自動(dòng)設(shè)置的。FlagStatus是枚舉類型void USART1_IRQHandler(void)uint8_t ch;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) /ch = USART1->DR;ch = USART_ReceiveData(USART1); printf( "%c", ch ); /將接受到的數(shù)據(jù)直接返回打印 所以串口發(fā)生接收中斷后通過(guò)對(duì)數(shù)據(jù)寄存

28、器的讀操作來(lái)清除接收中斷標(biāo)志啦  NVIC,中文名嵌套中斷向量控制器,是Cortex-M3系列控制器內(nèi)部獨(dú)有集成單元,與CPU結(jié)合緊密,降低中斷延遲時(shí)間并且能更加高效處理后續(xù)中斷。舉個(gè)例子,比如火車站買(mǎi)票,那些火車站的規(guī)章制度就是NVIC,規(guī)定學(xué)生和軍人有比一般人更高優(yōu)先級(jí),它們則給你單獨(dú)安排個(gè)窗口,同學(xué)與同學(xué)之間也有區(qū)別,那就是你也得排隊(duì),也就是你的組別(搶斷優(yōu)先級(jí))和你的排隊(duì)序號(hào)(響應(yīng)優(yōu)先級(jí))決定你何時(shí)能買(mǎi)到票。       搶斷優(yōu)先級(jí),顧名思義,能再別人中斷是搶占別人中斷,實(shí)現(xiàn)中斷嵌套。響應(yīng)優(yōu)先級(jí)則只能排隊(duì),不能搶在前

29、面插別人的對(duì),即不能嵌套。STM32 V3.5版本的庫(kù)函數(shù)中沒(méi)有原來(lái)版本中單獨(dú)對(duì)于NVIC(中斷向量嵌套)的外設(shè)驅(qū)動(dòng),把NVIC的外設(shè)驅(qū)動(dòng)放在了misc.c中,實(shí)際上是代替原來(lái)的stm32f10x_nvic.c.另一種串口代碼看中斷函數(shù)串口DMA我們知道在 C 語(yǔ)言中數(shù)組名就是該數(shù)組的基地址,而數(shù)組(變量)是被保存到內(nèi)存(SRAM)上的,所以我們實(shí)質(zhì)上給 .DMA_MemoryBaseAddr 這個(gè)結(jié)構(gòu)體成員賦予了一個(gè)內(nèi)存地址。按鍵外部中斷按鍵輸入知識(shí)點(diǎn)就是靜態(tài)變量的使用啦ADC模數(shù)(A/D)轉(zhuǎn)換器工作原理A/D轉(zhuǎn)換器(Analog-to-Digital Converter)又叫模/數(shù)轉(zhuǎn)換器,

30、即是將模擬信號(hào)(電壓或是電流的形式)轉(zhuǎn)換成數(shù)字信號(hào)。這種數(shù)字信號(hào)可讓儀表,計(jì)算機(jī)外設(shè)接口或是微處理機(jī)來(lái)加以操作或勝作使用。 A/D 轉(zhuǎn)換器 (ADC)的型式有很多種,方式的不同會(huì)影響測(cè)量后的精準(zhǔn)度。A/D 轉(zhuǎn)換器的功能是把模擬量變換成數(shù)字量。由于實(shí)現(xiàn)這種轉(zhuǎn)換的工作原理和采用工藝技術(shù)不同,因此生產(chǎn)出種類繁多的A/D 轉(zhuǎn)換芯片。A/D 轉(zhuǎn)換器按分辨率分為4 位、6 位、8 位、10 位、14 位、16 位和BCD碼的31/2 位、51/2 位等。按照轉(zhuǎn)換速度可分為超高速(轉(zhuǎn)換時(shí)間=330ns),次超高速(3303.3S),高速(轉(zhuǎn)換時(shí)間3.3333S),低速(轉(zhuǎn)換時(shí)間330S)等。A/D

31、 轉(zhuǎn)換器按照轉(zhuǎn)換原理可分為直接A/D 轉(zhuǎn)換器和間接A/D 轉(zhuǎn)換器。所謂直接A/D 轉(zhuǎn)換器,是把 模擬信號(hào)直接轉(zhuǎn)換成數(shù)字信號(hào),如逐次逼近型,并聯(lián)比較型等。其中逐次逼近型A/D 轉(zhuǎn)換器,易于用集成工藝實(shí)現(xiàn),且能達(dá)到較高的分辨率和速度,故目前集成化A/D 芯片采用逐次逼近型者多;間接A/D 轉(zhuǎn)換器是先把模擬量轉(zhuǎn)換成中間量,然后再轉(zhuǎn)換成數(shù)字量,如電壓/時(shí)間轉(zhuǎn)換型(積分型),電壓/頻率轉(zhuǎn)換型,電壓/脈寬轉(zhuǎn)換型等。 其中積分型A/D 轉(zhuǎn)換器電路簡(jiǎn)單,抗干擾能力強(qiáng),切能作到高分辨率,但轉(zhuǎn)換速度較慢。 有些轉(zhuǎn)換器還將多路開(kāi)關(guān)、基準(zhǔn)電壓源、時(shí)鐘電路、譯碼器和轉(zhuǎn)換電路集成在一個(gè)芯片內(nèi),已超出了單純A/D 轉(zhuǎn)換功能

32、,使用十分方便。ADC 經(jīng)常用于通訊、數(shù)字相機(jī)、儀器和測(cè)量以及計(jì)算機(jī)系統(tǒng)中,可方便數(shù)字訊號(hào)處理和信息的儲(chǔ)存。大多數(shù)情況下,ADC 的功能會(huì)與數(shù)字電路整合在同一芯片上,但部份設(shè)備仍需使用獨(dú)立的ADC。行動(dòng)電話是數(shù)字芯片中整合ADC 功能的例子,而具有更高要求的蜂巢式基地臺(tái)則需依賴獨(dú)立的ADC 以提供最佳性能ADC 具備一些特性,包括:1. 模擬輸入,可以是單信道或多信道模擬輸入;2. 參考輸入電壓,該電壓可由外部提供,也可以在ADC 內(nèi)部產(chǎn)生;3. 頻率輸入,通常由外部提供,用于確定ADC 的轉(zhuǎn)換速率;4. 電源輸入,通常有模擬和數(shù)字電源接腳;5. 數(shù)字輸出,ADC 可以提供平行或串行的數(shù)字輸出

33、。在輸出位數(shù)越多(分辨率越好)以及轉(zhuǎn)換時(shí)間越快的要求下,其制造成本與單價(jià)就越貴。  一個(gè)完整的A/D轉(zhuǎn)換過(guò)程中,必須包括取樣、保持、量化與編碼等幾部分電路。 AD轉(zhuǎn)換器需注意的項(xiàng)目:  取樣與保持 量化與編碼 分辨率 轉(zhuǎn)換誤差 轉(zhuǎn)換時(shí)間 絕對(duì)精準(zhǔn)度、相對(duì)精準(zhǔn)度 取樣與保持 由于取樣時(shí)間極短,取樣輸出為一串?dāng)嗬m(xù)的窄脈沖。要把每個(gè)取樣的窄脈沖信號(hào)數(shù)字化,是需要一定的時(shí)間。 因此在兩次取樣之間,應(yīng)將取樣的模擬信號(hào)暫時(shí)儲(chǔ)存到下個(gè)取樣脈沖到來(lái),這個(gè)動(dòng)作稱之為保持。在模擬電路設(shè)計(jì)上,因此需要增加一

34、個(gè)取樣-保持電路。為了保證有正確轉(zhuǎn)換,模擬電路要保留著還未轉(zhuǎn)換的數(shù)據(jù)。 一個(gè)取樣-保持電路可保證模擬電路中取樣時(shí),取樣時(shí)間的穩(wěn)定并儲(chǔ)存,通常使用電容組件來(lái)儲(chǔ)存電荷。根據(jù)數(shù)字信號(hào)處理的基本原理,Nyquist取樣定理,若要能正確且忠實(shí)地呈現(xiàn)所擷取的模擬信號(hào),必須取樣頻率至少高于最大頻率的2倍。 例如,若是輸入一個(gè)100Hz的正弦波的話,最小的取樣頻率至少要2倍,即是200Hz。 雖說(shuō)理論值是如此,但真正在應(yīng)用時(shí),最好是接近10倍才會(huì)有不錯(cuò)的還原效果(因取樣點(diǎn)越多)。若針對(duì)多信道的A/D轉(zhuǎn)換器來(lái)說(shuō),就必須乘上信道數(shù),這樣平均下去,每一個(gè)通道才不會(huì)有失真的情況產(chǎn)生。&#

35、160;量化與編碼 量化與編碼 電路是A/D轉(zhuǎn)換器的核心組成的部分,一般對(duì)取樣值的量化方式有下列兩種: 只舍去不進(jìn)位 首先取一最小量化單位=U/2n,U是輸入模擬電壓的最大值,n是輸出數(shù)字?jǐn)?shù)值的位數(shù)。 當(dāng)輸入模擬電壓U在0之間,則歸入0,當(dāng)U在2之間,則歸入1。透過(guò)這樣的量化方法產(chǎn)生的最大量化誤差為/2,而且量化誤差總是為正,+1/2LSB。  有舍去有進(jìn)位 如果量化單位=2U/(2 n+11),當(dāng)輸入電壓U在0/2之間,歸入0,當(dāng)U在/23/2之間的話,就要?dú)w入1。這種量化方法產(chǎn)生的最大量化誤差為/2,而且量化誤差有正,有

36、負(fù),為±1/2LSB。  量化結(jié)果也造成了所謂的量化誤差。 解析度 指A/D轉(zhuǎn)換器所能分辨的最小模擬輸入量。通常用轉(zhuǎn)換成數(shù)字量的位數(shù)來(lái)表示,如8-bit,10-bit,12-bit與16-bit等。位數(shù)越高,分辨率越高。若小于最小變化量的輸入模擬電壓的任何變化,將不會(huì)引起輸出數(shù)字值的變化。 采用12-bit 的AD574,若是滿刻度為10V的話,分辨率即為10V / 212 = 2.44mV。 而常用的8-bit 的ADC0804,若是滿刻度為5V的話,分辨率即為5V / 28 = 19.53mV。  選擇適用的A

37、/D轉(zhuǎn)換器是相當(dāng)重要的,并不是分辨率越高越好。 不需要分辨率高的場(chǎng)合,所擷取到的大多是噪聲。 分辨率太低,會(huì)有無(wú)法取樣到所需的信號(hào)。 模擬數(shù)字轉(zhuǎn)換器的分辨率是指,對(duì)于允許范圍內(nèi)的模擬信號(hào),它能輸出離散數(shù)字信號(hào)值的個(gè)數(shù)。這些信號(hào)值通常用二進(jìn)制數(shù)來(lái)存儲(chǔ),因此分辨率經(jīng)常用比特作為單位,且這些離散值的個(gè)數(shù)是2的冪指數(shù)。例如,一個(gè)具有8位分辨率的模擬數(shù)字轉(zhuǎn)換器可以將模擬信號(hào)編碼成256個(gè)不同的離散值(因?yàn)?8 = 256),從0到255(即無(wú)符號(hào)整數(shù))或從-128到127(即帶符號(hào)整數(shù)),至于使用哪一種,則取決于具體的應(yīng)用。分辨率同時(shí)可以用電氣性質(zhì)來(lái)描述,使用單位

38、伏特。使得輸出離散信號(hào)產(chǎn)生一個(gè)變化所需的最小輸入電壓的差值被稱作最低有效位(Least significant bit, LSB)電壓。這樣,模擬數(shù)字轉(zhuǎn)換器的分辨率Q等于LSB電壓。模擬數(shù)字轉(zhuǎn)換器的電壓分辨率等于它總的電壓測(cè)量范圍除以離散電壓間隔數(shù):這里N是離散電壓間隔數(shù),EFSR是總的電壓測(cè)量范圍, EFSR由下式給出這里VRefHi和VRefLow是轉(zhuǎn)換過(guò)程允許電壓的上下限。正常情況下,電壓間隔數(shù)等于這里M是模擬數(shù)字轉(zhuǎn)換器的分辨率,以比特為單位。 轉(zhuǎn)換誤差 通常以相對(duì)誤差的形式輸出,其表示A/D轉(zhuǎn)換器實(shí)際輸出數(shù)字值與理想輸出數(shù)字值的差別,并用最低有效位LSB的倍數(shù)表示。

39、 轉(zhuǎn)換時(shí)間 轉(zhuǎn)換時(shí)間是A/D轉(zhuǎn)換完成一次所需的時(shí)間。 從啟動(dòng)信號(hào)開(kāi)始到轉(zhuǎn)換結(jié)束并得到穩(wěn)定的數(shù)字輸出值為止的時(shí)間間隔。轉(zhuǎn)換時(shí)間越短則轉(zhuǎn)換速度就越快。 精準(zhǔn)度 對(duì)于A/D轉(zhuǎn)換器,精準(zhǔn)度指的是在輸出端產(chǎn)生所設(shè)定的數(shù)字?jǐn)?shù)值,其實(shí)際需要的模擬輸入值與理論上要求的模擬輸入值之差。 精確度依計(jì)算方式不同,可以區(qū)分為 絕對(duì)精確度 相對(duì)精確度; 所謂的絕對(duì)精確度是指實(shí)際輸出值與理想理論輸出值的接近程度,其相關(guān)的關(guān)系是如下式子所列: 絕對(duì)精確度  相對(duì)精準(zhǔn)度指的是滿刻度值校準(zhǔn)以后,任意數(shù)字輸出所對(duì)應(yīng)的實(shí)際

40、模擬輸入值(中間值)與理論值(中間值)之差。  對(duì)于線性A/D轉(zhuǎn)換器,相對(duì)精準(zhǔn)度就是它的線性程度。由于電路制作上影響,會(huì)產(chǎn)生像是非線性誤差,或是量化誤差等減低相對(duì)精準(zhǔn)度的因素。  相對(duì)精確度是指實(shí)際輸出值與一理想理論之滿刻輸出值之接近程度,其相關(guān)的關(guān)系是如下式子所列: 相對(duì)精準(zhǔn)度  基本上,一個(gè)n-bit的轉(zhuǎn)換器就有n個(gè)數(shù)字輸出位。這種所產(chǎn)生的位數(shù)值是等效于在A/D轉(zhuǎn)換器的輸入端的模擬大小特性值。  如果外部所要輸入電壓或是電流量較大的話,所轉(zhuǎn)換后的的位數(shù)值也就較大。  透過(guò)并列端口接

41、口或是微處理機(jī)連接A/D轉(zhuǎn)換器時(shí),必須了解如何去控制或是驅(qū)動(dòng)這顆A/D轉(zhuǎn)換器的問(wèn)題。因此需要了解到A/D轉(zhuǎn)換器上的控制信號(hào)有哪些。                            圖1、A/D轉(zhuǎn)換器的基本引腳配置電路圖    如圖1所示,一個(gè)A/D轉(zhuǎn)換器具備了: 輸出引線(D0D7,以8-bi

42、t為例), 一個(gè)開(kāi)始轉(zhuǎn)換(Start of Converter,SOC) 結(jié)束轉(zhuǎn)換(End of Conversion,EOC)信號(hào)。 輸出致能腳位獨(dú)立看門(mén)狗窗口看門(mén)狗獨(dú)立看門(mén)狗Iwdg我的理解是獨(dú)立于系統(tǒng)之外,因?yàn)橛歇?dú)立時(shí)鐘,所以不受系統(tǒng)影響的系統(tǒng)故障探測(cè)器。主要用于監(jiān)視硬件錯(cuò)誤。 窗口看門(mén)狗wwdg我的理解是系統(tǒng)內(nèi)部的故障探測(cè)器,時(shí)鐘與系統(tǒng)相同。如果系統(tǒng)時(shí)鐘不走了,這個(gè)狗也就失去作用了。主要用于監(jiān)視軟件錯(cuò)誤。PWM輸出APB1最大頻率是36Mhz,這個(gè)在初始化的時(shí)候就已經(jīng)設(shè)置了的,如果用庫(kù)函數(shù)默認(rèn)就是36Mhz,在main函數(shù)運(yùn)行前就設(shè)置了,一般可以

43、不管。如果自己操作寄存器就不一定了。然后psc的問(wèn)題:其實(shí)里面有兩個(gè)分頻的概念,APB預(yù)分頻和計(jì)數(shù)器時(shí)鐘頻率(CK_PSC)的關(guān)系指的是AHB分頻得到APB1,一般AHB取最大72Mhz,所以APB1是AHB的2分頻,既然不是1分頻,所以計(jì)數(shù)器時(shí)鐘就是APB1的2倍了。而最終定時(shí)器的時(shí)鐘頻率(CK_CNT)是對(duì)CK_PSC進(jìn)行psc值的分頻得到的,這個(gè)值就是我們用來(lái)定時(shí)計(jì)算的數(shù)值。脈沖寬度調(diào)制,簡(jiǎn)稱PWM(Pulse Width Modulation)是利用微處理器的數(shù)字輸出 對(duì)模擬電路進(jìn)行控制的一種非常有效的控制技術(shù),常用于控制Led燈的亮度、電機(jī)轉(zhuǎn)速等。STM32 的定時(shí)器除了 TIM6

44、和 7,其他的定時(shí)器都可以用來(lái)產(chǎn)生 PWM 輸出。其中高級(jí)定時(shí)器TIM1和TIM8可以同時(shí)產(chǎn)生高達(dá)7路的PWM輸出,通用定時(shí)器TIM2TIM5可以同時(shí)產(chǎn)生4路PWM輸出。使用通用定時(shí)器輸出PWM同樣需要4步配置,由于輸出PWM信號(hào)時(shí),不需要定時(shí)器中斷,所以不需要配置NVIC,但是需要配置TIM_OCInitStructure。輸入捕獲中斷的產(chǎn)生之一就是由于有更新事件發(fā)生,如果禁止了更新事件(所謂更新事件一般是指計(jì)數(shù)器的溢出),那么如果通過(guò)計(jì)數(shù)溢出產(chǎn)生中斷將不能發(fā)生。這里設(shè)置最大的溢出次數(shù)為111111就是63嘛,然后乘以0XFFFF+1,因?yàn)橐绯鲆菜阋淮斡?jì)時(shí)嘛,就等于4128768412876

45、8+65535=4194303然后定時(shí)器頻率為72MHz/(71+1)=1MHz,所以周期就是1uS了最長(zhǎng)捕獲時(shí)間就是四秒多一點(diǎn)點(diǎn)啦,不過(guò)可以修改最大捕獲的時(shí)間LCD顯示我們之前通過(guò)使用GPIO來(lái)模擬8080/6800時(shí)序從而達(dá)到驅(qū)動(dòng)彩屏的,同樣需要明白的一點(diǎn)就是我們也只是使用FSMC來(lái)模擬8080/6800時(shí)序,只不過(guò)這個(gè)讀寫(xiě)速度有些快(使用了總線嘛),僅此而已!如果不明白8080/6800時(shí)序是怎樣的或許在這個(gè)文庫(kù)里面能找到你想要的簡(jiǎn)單一點(diǎn)就是:8080是通過(guò)“讀使能(RE)”和“寫(xiě)使能(WE)”兩條控制線進(jìn)行讀寫(xiě)操作。  6800是通過(guò)“總使能(E)”和“讀寫(xiě)選擇(W/R)”兩

46、條控制線進(jìn)行這是中文手冊(cè)的描述,就是地址線A16對(duì)應(yīng)HADDR的17位啦時(shí)序圖理解:1、Fsmc講完啦即=0x6C000000啦_可以是合法的標(biāo)識(shí)符的一部分。不過(guò)這里更多的是種慣例(_表示這個(gè)符號(hào)是系統(tǒng)的一部分,跟用戶的標(biāo)識(shí)符區(qū)分),見(jiàn)得多了就熟悉這種慣例了。在linux的系統(tǒng)調(diào)用中,系統(tǒng)調(diào)用函數(shù)和宏定義是下劃線開(kāi)頭的,目的是為了區(qū)分用戶定義的函數(shù)和系統(tǒng)調(diào)用函數(shù),所以如果在linux下寫(xiě)C語(yǔ)言盡量不要用下劃線開(kāi)頭寫(xiě)函數(shù)名或宏定義。LCD的驅(qū)動(dòng)代碼太長(zhǎng) ,省略空格的阿斯科馬值是32,現(xiàn)在它的值為01206字體就是一個(gè)字符占1x12=12字節(jié),一個(gè)字節(jié)8位嘛,xxxxxxxx中的x為1就顯示一個(gè)點(diǎn)

47、,為0就不顯示嘛RTC小于的優(yōu)先級(jí)比邏輯與要高,就是說(shuō)在2.5秒后跳出循環(huán)代表晶振有問(wèn)題嘛對(duì)于單片機(jī)轉(zhuǎn)ARM的同學(xué)來(lái)說(shuō),RTC可能比較少接觸。提到實(shí)時(shí)時(shí)鐘,更經(jīng)常想到的是DS1302。當(dāng)然,在STM32里,自己一個(gè)CPU已經(jīng)足夠,不需要DS1302。實(shí)際上,RTC就只一個(gè)定時(shí)器而已,掉電之后所有信息都會(huì)丟失,因此我們需要找一個(gè)地方來(lái)存儲(chǔ)這些信息,于是就找到了備份寄存器。因?yàn)樗綦姾笕匀豢梢酝ㄟ^(guò)紐扣電池供電,所以能時(shí)刻保存這些數(shù)據(jù)。我們?cè)诒酒诮坛讨袑⒃敿?xì)講述RTC原理及例程,以引導(dǎo)大家順利進(jìn)入RTC的世界。1.STM32的RTC模塊RTC模塊之所以具有實(shí)時(shí)時(shí)鐘功能,是因?yàn)樗鼉?nèi)部維持了一個(gè)獨(dú)立的定

48、時(shí)器,通過(guò)配置,可以讓它準(zhǔn)確地每秒鐘中斷一次。下面就來(lái)看以下它的組成結(jié)構(gòu)。1.1RTC的組成RTC由兩個(gè)部分組成:APB1接口部分以及RTC核心部分(感覺(jué)說(shuō)了等于沒(méi)說(shuō),因?yàn)槿魏文K都會(huì)有接口部分和它自己的核心部分。請(qǐng)注意,權(quán)威的STM32系列手冊(cè)是這么說(shuō)的?)。筆者猜想原因可能是STM32所有的外設(shè)默認(rèn)時(shí)鐘無(wú)效,使用某個(gè)外設(shè)時(shí),再開(kāi)啟時(shí)鐘,用這樣的方式來(lái)降低功耗。這里的RTC,APB1接口由APB1總線時(shí)鐘來(lái)驅(qū)動(dòng)。為了突出時(shí)鐘吧?不過(guò)據(jù)說(shuō)APB1接口部分還包括一組16位寄存器。RTC核心部分又分為預(yù)分頻模塊和一個(gè)32位的可編程計(jì)數(shù)器。前者可使每個(gè)TR_CLK周期中RTC產(chǎn)生一個(gè)秒中斷,后者可被

49、初始化為當(dāng)前系統(tǒng)時(shí)間。此后系統(tǒng)時(shí)間會(huì)按照TR_CLK周期進(jìn)行累加,實(shí)現(xiàn)時(shí)鐘功能。1.2對(duì)RTC的操作我們對(duì)RTC的訪問(wèn),是通過(guò)APB1接口來(lái)進(jìn)行的。注意,APB1剛被開(kāi)啟的時(shí)候(比如剛上電,或剛復(fù)位后),從APB1上讀出來(lái)的RTC寄存器的第一個(gè)值有可能是被破壞了的(通常讀到0)。這個(gè)不幸,STM32是如何預(yù)防的呢?我們?cè)诔绦蛑校瑫?huì)先等待RTC_CRL寄存器中的RSF位(寄存器同步標(biāo)志)被硬件置1,然后才開(kāi)始讀操作,這時(shí)候讀出來(lái)的值就是OK的。那么對(duì)RTC寄存器的寫(xiě)操作會(huì)不會(huì)有類似的情況呢?對(duì)于寫(xiě)操作,我們只要注意,每一次寫(xiě)操作,必須確保在前一次寫(xiě)操作完成后進(jìn)行。這個(gè)“確?!保峭ㄟ^(guò)查詢RTC_CR寄存器中的RTOFF狀態(tài)位,判斷RTC寄存器是否處于更新中。只有當(dāng)RTOFF狀態(tài)位是1,才可以寫(xiě)RTC寄存器。2.RTC的編程RTC的例程,主要是設(shè)置RTC時(shí)鐘,使得其在超級(jí)終端上顯示出當(dāng)前的時(shí)鐘。這個(gè)

溫馨提示

  • 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)論