STM32常見知識點_第1頁
STM32常見知識點_第2頁
STM32常見知識點_第3頁
STM32常見知識點_第4頁
STM32常見知識點_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、將stm32f103z8t6 模板改成stm32f103c8t6 只需要將c+ MD改為STM32F10X_MD,USE_STDPERIPH_DRIVER STM32 嵌入式筆記 常見知識點解析 前言:基礎(chǔ)知識VDD:電源電壓(單極器件);電源電壓(4000系列數(shù)字電 路);漏極電壓(場效應(yīng)管)VCC:電源電壓(雙極器件);電源電壓(74系列數(shù)字電路);聲控載波(Voice Controlled Carrier)VSS:地或電源負(fù)極VEE:負(fù)電壓供電;場效應(yīng)管的源極(S)VPP:編程/擦除電壓。詳解:在電子電路中,VCC是電路的供電電壓, VDD是芯片的工作電壓:VCC:C=circuit 表

2、示電路的意思, 即接入電路的電壓, D=device 表示器件的意思, 即器件內(nèi)部的工作電壓,在普通的電子電路中,一般VccVdd !VSS:S=series 表示公共連接的意思,也就是負(fù)極。有些IC 同時有VCC和VDD, 這種器件帶有電壓轉(zhuǎn)換功能。在“場效應(yīng)”即COMS元件中,VDD乃CMOS的漏極引腳,VSS乃CMOS的源極引腳, 這是元件引腳符號,它沒有“VCC”的名稱,你的問題包含3個符號,VCC / VDD /VSS, 這顯然是電路符號。開放板硬件資源連接:LED0=PB5 LED1=PE5(通過TIM3控制的LED1的閃爍情況)KEY0 =PE4 KEY1=PE3 KEY2=PE

3、2 KEY_UP=PA0While();當(dāng)括號里面為1時為真時,這是一個死循環(huán),代碼不再向下執(zhí)行。當(dāng)括號里面為0 為假,代碼繼續(xù)向下執(zhí)行。While(1);這是一個死循環(huán),代碼不再向下執(zhí)行。任何美好情感的得到,任何美好事物的創(chuàng)造 從來都是不輕松的 你不可能輕輕松松的實現(xiàn)夢想 獲得成功 人類一切美好的東西都是要有稱重的 都是會累的其實所謂的愛就是分享 同步的感受這個世界,成熟起來獨立和分享你們在同步的觀察和感受這個世界 努力讓自己獨立起來在一起時努力甜蜜,不在一起時各自精彩浮空輸入:浮空就是邏輯電平器件的輸入引腳不接高電平也不接低電平,由于邏輯電平的內(nèi)部的結(jié)構(gòu),當(dāng)輸入引腳懸空時,相當(dāng)于該引腳接入

4、了高電平。一般實際運用時,該引腳不建議懸空,易受干擾。通俗的講就是讓管教什么也不接,浮空著。模擬輸入:模擬輸入是指傳統(tǒng)方式的輸入。數(shù)字輸入時輸入PCM數(shù)字信號。即0、1的二進(jìn)制數(shù)字信號,通過數(shù)模轉(zhuǎn)換,轉(zhuǎn)換成模擬信號,經(jīng)前級放大進(jìn)入功率放大器,功率放大器還是模擬的。推挽輸出:可以輸出高電平,低電平,連接數(shù)字器件,推挽結(jié)構(gòu)一般是指兩個三極管分別受兩個互補(bǔ)信號的控制,總是在一個三極管導(dǎo)通的時候另一個截止。高低電平由IC的電源決定。開漏輸出:輸出端相當(dāng)于三極管的集電極,要得到高電平狀態(tài)需要上拉電阻才行,適合于做電流型驅(qū)動,其吸收電流能力相對較強(qiáng)。復(fù)用開漏輸出、復(fù)用推挽輸出:可以理解為GPIO口被用作第

5、二功能時的配置情況(即并非作為通用IO口使用)GPIO_Mode_AIN 模擬輸入 GPIO_Mode_Out_OD開漏輸出PIO_Mode_IN_FLOATING 浮空輸入 GPIO_Mode_Out_PP推挽輸出GPIO_Mode_IPD 下拉 GPIO_Mode_AF_OD 復(fù)用開漏輸出GPIO_Mode_IPU 上拉 GPIO_Mode_AF_PP復(fù)用推挽輸出關(guān)于引腳復(fù)用與映射的問題:default(默認(rèn)復(fù)用功能) remap(重定義功能)1、 例如串口1 的發(fā)送接收引腳是PA9,PA10,當(dāng)我們把PA9,PA10不用作GPIO,而用做復(fù)用功能串口1的發(fā)送接收引腳的時候,叫端口復(fù)用1、

6、GPIO端口時鐘使能。RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);2、復(fù)用外設(shè)時鐘使能。比如你要將端口PA9,PA10復(fù)用為串口,所以要使能串口時鐘。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);2、即一個外設(shè)的引腳除了具有默認(rèn)的端口外,還可以通過設(shè)置重映射寄存器的方式,把這個外設(shè)的引腳映射到其它的端口。重映射AFIO重映射的步驟:1、 使能被映射到的IO端口時鐘 2、 使能被映射到的外設(shè)時鐘3、 使能AFIO功能的時鐘4、 進(jìn)行重映射GPIO_InitTypeDef

7、GPIO_InitStructure; /PWM中重映射的例子TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);/使能定時器3時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); /使能GPIO外設(shè)和AFIO復(fù)用功能模塊時鐘GPIO_PinRemapConfig(GPIO_P

8、artialRemap_TIM3, ENABLE); /Timer3部分重映射 TIM3_CH2-PB5 remap(重定義功能)/此方格中的需要進(jìn)行重映射 MODE 的設(shè)置問題:1、 LED燈設(shè)置為推挽輸出。2、KEY0、KEY1、KEY2都是低電平有效,KEY_UP是高電平有效 KEY0、KEY1、KEY2設(shè)置為上拉輸入、KEY_UP設(shè)置為下拉輸入。3、u8 KEY_Scan(u8 mode) static u8 key_up=1;/按鍵按松開標(biāo)志if(mode)key_up=1; /支持連按 if(key_up&(KEY0=0|KEY1=0|KEY2=0|WK_UP=1)delay_ms

9、(10);/去抖動 key_up=0;if(KEY0=0)return KEY0_PRES;else if(KEY1=0)return KEY1_PRES;else if(KEY2=0)return KEY2_PRES;else if(WK_UP=1)return WKUP_PRES;else if(KEY0=1&KEY1=1&KEY2=1&WK_UP=0)key_up=1; return 0;/ 無按鍵按下按鍵掃描(不支持連續(xù)按)的一般思路(按一下加一)u8 KEY_Scan(void) static u8 key_up=1;/僅第一次執(zhí)行,第二次不會被按下。代表上次按鍵沒有被按下,是松開的

10、。 但是保留上一次的值 if(key_up & KEY按下) delay_ms(10);/延時,防抖 key_up=0;/標(biāo)記這次key已經(jīng)按下 /key_up=1,代表按鍵沒有被按下,key_up=0代表按鍵被按下 if(KEY確實按下) return KEY_VALUE; else if(KEY沒有按下) key_up=1;/ 此時的值會被保留在static里面 return 沒有按下 按鍵掃描(兩種模式合二為一)的一般思路u8 KEY_Scan(u8 mode) static u8 key_up=1; / 此句沒有意義 if(mode=1) key_up=1;/支持連續(xù)按 key_up=

11、1;代表一直沒有按下 key_up一直會等于1 if(key_up & KEY按下) delay_ms(10);/延時,防抖 key_up=0;/標(biāo)記這次key已經(jīng)按下 此句沒有意義 if(KEY確實按下) return KEY_VALUE; else if(KEY沒有按下) key_up=1; 此句沒有意義 return 沒有按下 比較重要的函數(shù)的用法:例題1、帶參數(shù)的形式u8 Is_Leap_Year(u16 year) if(year%4=0) /必須能被4整除 if(year%100=0) if(year%400=0)return 1;/如果以00結(jié)尾,還要能被400整除 能被4、10

12、0、400整除 else return 0; /能被4和100整除 但是不能被400整除else return 1; /僅能被4整除 else return 0;/ 都整除不了 for(t=1970;tsyear;t+)/把所有年份的秒鐘相加if(Is_Leap_Year(t)seccount+=;/閏年的秒鐘數(shù)else seccount+=; /平年的秒鐘數(shù) 第一章 中斷優(yōu)先級分組 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; /在misc.c中有NVIC_Init 定位到stm32f10x.h的結(jié)構(gòu)體中NVIC_InitStructur

13、e.NVIC_IRQChannelPreemptionPriority=3 ;/搶占優(yōu)先級3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;/子優(yōu)先級3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/IRQ通道使能NVIC_Init(&NVIC_InitStructure);/根據(jù)指定的參數(shù)初始化VIC寄存器 第二章 串行通信 串行通信的通信方式 同步通信:帶時鐘同步信號傳輸。 -SPI,IIC通信接口 異步通信:不帶時鐘同步信號。 -UART(通用異步收發(fā)器),單總線USART_InitTyp

14、eDef USART_InitStructure;/結(jié)構(gòu)體 USART_InitStructure.USART_BaudRate = bound;/串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;/字長為8位數(shù)據(jù)格式USART_InitStructure.USART_StopBits = USART_StopBits_1;/一個停止位USART_InitStructure.USART_Parity = USART_Parity_No;/無奇偶校驗位USART_InitStructure.USART_Hardware

15、FlowControl = USART_HardwareFlowControl_None;/無硬件數(shù)據(jù)流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;/收發(fā)模式USART_Init(USART1, &USART_InitStructure); /初始化串口1 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);/開啟串口接受中斷 USART_Cmd(USART1, ENABLE);1、 void USART1_IRQHandler(void) /串口1中斷服務(wù)程定位到 s

16、tartup_stm32f10x.h 2、 USART_GetITStatus3、 USART_ClearITPendingBit /定位到stm32f10x.usart.c中 串口通信的原理 ABCDEFGHI.(0x0D),(0x0A) 第三章 外部中斷的概述以線0位例:它對應(yīng)了GPIOA.0 ,GPIOB.0 ,GPIOC.0 .GPIOI.0 .而中斷線每次只能連接到1個IO口上,這樣就需要通過配置來決定對應(yīng)的中斷線配置到哪個GPIO上了即每個EXTI線對應(yīng)GPIOA.0 ,GPIOB.0 ,GPIOC.0 .GPIOI.0G個IO引腳 GPIOx.0映射到EXTI0GPIOx.1映射

17、到EXTI1GPIOx.15映射到EXTI15從表中可以看出,外部中斷線59分配一個中斷向量,共用一個服務(wù)函數(shù) 外部中斷線1015分配一個中斷向量,共用一個中斷服務(wù)函數(shù)。IO口外部中斷在中斷向量表中只分配了7個中斷向量,也就是說只能用7個中斷服務(wù)函數(shù)。EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler EXTI9_5_IRQHandler EXTI15_10_IRQHandler外部中斷一般的設(shè)置步驟初始化IO口為輸入。 / 外部中斷初始化、中斷優(yōu)先級分組、 GPIO_Init

18、(); 開啟IO口復(fù)用時鐘。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);設(shè)置IO口與中斷線的映射關(guān)系。 void GPIO_EXTILineConfig();初始化線上中斷,設(shè)置觸發(fā)條件等。 EXTI_Init();配置中斷分組(NVIC),并使能中斷。 NVIC_Init(); 編寫中斷服務(wù)函數(shù)。 EXTIx_IRQHandler();清除中斷標(biāo)志位 EXTI_ClearITPendingBit();外部中斷常用庫函數(shù)void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t

19、GPIO_PinSource); /設(shè)置IO口與中斷線的映射關(guān)系 exp: GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);/ 解釋:中斷線EXTI2與GPIOE連接了void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); /初始化中斷線:觸發(fā)方式等ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);/判斷中斷線中斷狀態(tài),是否發(fā)生void EXTI_ClearITPendingBit(uint32_t EXTI_Line);/清除中斷線上的中

20、斷標(biāo)志位KEY0 KEY1 KEY2設(shè)置為下降沿觸發(fā) KEY_UP設(shè)置為上升沿觸發(fā)設(shè)置IO口與中斷線的映射關(guān)系:按鍵對應(yīng)GPIOE.0 GPIOE.2 GPIOE.3 GPIOE.4所以設(shè)置IO口與中斷映射的時候,只能設(shè)置成 EXTI_Line0、EXTI_Line2、EXTI_Line3、EXTI_Line4即映射號與所使用的IO號要一一對應(yīng)。 第四章 定時器高級定時器:TIM1 TIM8 帶死區(qū)控制盒緊急剎車,可應(yīng)用于PWM電機(jī)控制通用定時器:TIM2TIM5 通用。定時計數(shù),PWM輸出,輸入捕獲,輸出比較基本定時器:TIM6、TIM7 主要應(yīng)用于驅(qū)動DAC通用定時器的特點: 4個獨立的通

21、道(1、輸入捕獲 2、輸出比較3、PWM生成(邊緣或中間對齊模式) 4、單脈沖模式輸出) APB1時鐘可使用外部信號(TIMx_ETR)控制定時器和定時器互連(可以用1個定時器控制另外一個定時器)的同步電路。時鐘的計算方法:除非APB1的分頻系數(shù)是1,否則通用定時器的時鐘等于APB1時鐘的2倍。默認(rèn)調(diào)用SystemInit函數(shù)情況下:SYSCLK=72 初始化的時候APB1的時鐘為2分頻,所以APB1為36MHZAHB時鐘=72MAPB1時鐘=36M所以APB1的分頻系數(shù)=AHB/APB1時鐘=2所以,通用定時器時鐘CK_INT=2*36M=72M定時時間:t=(arr+1)(pcs+1)/T

22、clk 計數(shù)器時鐘可以由下列時鐘源提供:1、內(nèi)部時鐘(CK_INT)2、外部時鐘模式1:外部輸入腳(TIx)3、外部時鐘模式2:外部觸發(fā)輸入(ETR)4、內(nèi)部觸發(fā)輸入(ITRx):使用一個定時器作為另一個定時器的預(yù)分頻器,如可以配置一個定時器Timer1而作為另一個定時器Timer2的預(yù)分頻器。定時器的一般編寫方法/定時器的序號是可以隨便用的 1、能定時器時鐘。 RCC_APB1PeriphClockCmd();2、初始化定時器,配置ARR,PSC。 TIM_TimeBaseInit(); 3、開啟定時器中斷,配置NVIC。 void TIM_ITConfig();/更新中斷函數(shù) NVIC_I

23、nit(); /設(shè)置中斷優(yōu)先級分組4、使能定時器。 TIM_Cmd();5、 編寫中斷服務(wù)函數(shù)。 TIMx_IRQHandler();/才是定時器定時的時間函數(shù)(比如LED0每隔1s鐘閃爍)void TIM3_Int_D(u16 arr,u16 psc) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVICInitInstructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); / 定時器 TIM_TimeBaseStructure.TIM_Clo

24、ckDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period=arr;/重裝在值 TIM_TimeBaseStructure.TIM_Prescaler=psc;/預(yù)分頻值 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);/更新中斷 第五章 PWMSTM32的定時器除了TIM6和TIM7,其他的人定時器

25、都可以產(chǎn)生PWM輸出。其中高級定時器TIM1和TIM8最多可以產(chǎn)生7路的PWM輸出。通用的PWM可以產(chǎn)生多達(dá)4路的PWM輸出。復(fù)用功能 沒有重映射部分重映射完全重映射TIM3_CH1PA6PB4PC6TIM3_CH2PA7PB5PC7TIM3_CH3PB0PB0PC8TIM3_CH4PB1PB1PC9使能定時器3和相關(guān)IO口時鐘。 1、使能定時器3時鐘:RCC_APB1PeriphClockCmd(); 2、使能GPIOB時鐘:RCC_APB2PeriphClockCmd(); 3、 初始化IO口為復(fù)用功能輸出。函數(shù):GPIO_Init(); GPIO_InitStructure.GPIO_M

26、ode = GPIO_Mode_AF_PP; 4、這里我們是要把PB5用作定時器的PWM輸出引腳,所以要重映射配置, 所以需要開啟AFIO時鐘。同時設(shè)置重映射。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); 5、初始化定時器:ARR,PSC等:TIM_TimeBaseInit(); 6初始化輸出比較參數(shù):TIM_OC2Init();7使能預(yù)裝載寄存器TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_E

27、nable); 8.、使能定時器。TIM_Cmd();9、不斷改變比較值CCRx,達(dá)到不同的占空比效果:TIM_SetCompare2();/主函數(shù)中寫此句在板載的實例中,PB5連接到LEDO 引腳PB5中的remap項中有TIM3_CH2,所以需要進(jìn)行重映射 第六章 紅外遙控的部分 STM32正點原子 NEC遙控指令的數(shù)據(jù)格式為:同步碼頭、地址碼、地址反碼、控制碼、控制反碼均是8位數(shù)據(jù)格式 NEC碼的位定義:一個脈沖對應(yīng)560us的連續(xù)的載波,一個邏輯1傳輸需要2.25ms(560us脈沖+1680us低電平),一個邏輯0的傳輸需要1.125ms(560us脈沖+560us低電平) 而遙控接

28、收頭在收到脈沖的時候為電平,在沒有脈沖的時候為高電平,這樣,我們在接受頭端收到的信號為:邏輯1應(yīng)該是560us低+1680us高,邏輯0應(yīng)該是560us低+560高連發(fā)碼:如果一幀數(shù)據(jù)在發(fā)送完畢之后,按鍵仍然沒有放開,則發(fā)射重復(fù)碼,即連發(fā)碼,可以通過統(tǒng)計連發(fā)碼的次數(shù)標(biāo)記按鍵按下的長短次數(shù)。C51單片機(jī)紅外遙控: 紅外基帶信號發(fā)送協(xié)議引導(dǎo)碼 + 8位客戶碼1 + 8位客戶碼2 + 8位操作碼 + 8位操作反碼用戶真正須要的只有操作碼 客戶碼 操作碼客戶碼和操作碼都為8位的二進(jìn)制編碼NEC的uPD6121G編碼芯片定義的0,1如下:0: 0.56ms的高電平+0.565ms的低電平1: 0.56m

29、s的高電平+1.685ms的低電平同樣這樣的數(shù)碼0, 1的占空比也可以自已定義#include#define uchar unsigned char#define uint unsigned intsbit ir=P32;uchar irtime;uchar irdata33;/數(shù)據(jù)/引導(dǎo)碼 +8位用戶碼1+8位用戶碼2+8位操作碼+8位操作反碼uchar bitnum;/位的數(shù)值uchar startflag;uchar irok;uchar ircode4; /引導(dǎo)碼、用戶碼1、用戶碼2、操作碼、操作反碼 uchar irprosok;/紅外碼值處理uchar disnum8;sbit d

30、ula=P26;sbit wela=P27;uchar code table_du=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar code table_we=0xfe,0xfd,0xff,0xff,0xef,0xdf;void timer0init(void) /256*(1/12m)*12=0.256ms 一共irtime的時間 TMOD=0x02; TH0=0x00; TL0=0x00;ET0=1;EA=1;TR0=1;/有四個碼 ,一個碼8位void irpros

31、(void)/紅外碼值處理 / 紅外碼值處理 處理0碼4.4 和1碼 8.8 取中間值6 uchar mun,k,i,j;k=1;for(j=0;j4;j+)/有四個碼 ,操作碼,操作反碼 for(i=0;i1;if(irdatak6)/說明是高電平 1;/設(shè)置時間 mun=mun | 0x80;/最高位置 k+;ircodej=mun;/提取出來的值,放在ircode里面保存起來irprosok=1;/標(biāo)志位 說明紅外處理已經(jīng)結(jié)束void irwork(void) / 紅外碼值轉(zhuǎn)換 4個碼在開發(fā)板上顯示出來 disnum0=ircode0/16;/16進(jìn)制數(shù)disnum1=ircode0%16;disnum2=ircode1/16;disnum3=ircode1%16;disnum4=ircode2/16;disnum5=ircode2%16;disnum6=ircode3/16;disnum7=ircode3%16;delay(uchar x)uchar a,b;for(a=x;a0;a-)for(b=200;b0;b-);display()uchar i;for(i=0;i32&irtim

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論