牛人的STM32學習筆記寄存器版本_第1頁
牛人的STM32學習筆記寄存器版本_第2頁
牛人的STM32學習筆記寄存器版本_第3頁
牛人的STM32學習筆記寄存器版本_第4頁
牛人的STM32學習筆記寄存器版本_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一、GP10 口的配置STM32的DGPI0 口最多可以有 7組(GPI0aGPlOg ),而每一組 GPIO 口均有16個 雙向10組成。并且沒個10 口均可配置成8種模式(4種輸入模式,4種輸出模式)。不管 配置哪個10 口也不論將其配置成哪種模式(但是配置成哪種模式要看具體應用,參考中 文參考手冊第105頁)都可以按以下步驟來進行配置:(1)使能 P0RTX(x=AG )時鐘這里就得操作寄存器 RCC_APB2ENR ( 32為寄存器)了15141312111098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENlOP GEN76543210QP

2、FENOP EENOP DENlOP CENlOP BENlOP AEN保留AFIOENRCC_APB2ENR 的 0-15 位(0632 位保留)第28分別是使能GPI0AGPIOG時鐘的,只要將其置“ 1 ”即可,如RCC_APB2ENR|=1CRL&=OXFFFFFOFF ; GPIOD-CRL|=0X00000300 ; /PD.2 推挽輸出;其余 10 口的 低8位以此類推。3130292827262524CNF151:0MODE151:0CNF141:0MODE141:02322212019181716CNF131:0MODE131:0CNF121:0MODE121:0151413

3、12111098CNF111:0MODE111:0CNF101:0M0DE101:076543210CNF91:0MODE91:0CNF81:0MODE81:0GPIOx_CRH(端口配置高寄存器 x=AE)該寄存器用于配置 GPIOx的高8位,具體8種模式的配置見中文參考手冊例如:GPIOA-CRH&=0XFFFFFFF0; ; GPl0A-CRH|=0X00000003 ; /PA8 推挽輸出;其余 10 口 的高8位以此類推。15141312111098DR15IDR14IDR13IDR12IDR11IDR10IDR9IDR876543210DR7IDR6IDR5IDR4IDR3IDR2

4、IDR1IDR0(3)端口的輸入和輸出電平配置15141312111098ODR15ODR14ODR13ODR12ODR11ODR10ODR9ODR876543210ODR7ODR6ODR5ODR4ODR3ODR2ODR1ODR0GPIOx_IDR (端口輸入數(shù)據(jù)寄存器 x=AE) 該寄存器配置IO 口的015位的輸入數(shù)據(jù),以16位讀出。GPIOx_ODR (端口輸出數(shù)據(jù)寄存器 x=AE)該寄存器配置IO 口的015位的輸入初始狀態(tài), 例如:GPIOA-ODR|=1APB2ENR|=1CRL&=0XFFFFFFF0;/ PA0 設置成輸入GPI OA-CRL|=0X00000008;GP IO

5、A-CR H&=0X0F0FFFFF;/ PA13,15 設置成輸入GPI OA-CRH|=0X80800000;GPI OA-ODR|=1ODR|=1A PB2ENR|=1A PB2ENR|=1CR H&=0XFFFFFFF0;GPI OA-CRH|=0X00000003;/ PA8GPI OA-ODR|=1CRL&=0XFFFFF0FF;GPIO D-CRL|=0X00000300;/ PD.2GPIO D-ODR|=12;/P D.2推挽輸出輸出高15141312111098ADC3RSTUSART1RST1M8RSTSP I1RSTTIM1RSTADC2RSTADC1RSTIOP GR

6、ST76543210IOP FRSTIOP ERSTIOP DRSTIOP CRSTIOP BRSTIOP ARST保留AFIORSTRCC_APB2RSTR ( APB2外設復位寄存器)寄存器 RCC_APB2RSTR的第14位是進行串口 1的復位如:RCC_APB1RSTR|=114; /將 串口 1復位,然后結束復位 RCC_A PB1RSTR|= ( 114); 結束串口 1復位其余串口復位在寄存器RCC APB1RSTR里如下表:RCC_APB1RSTR (串口 1的復位)和寄存器這兩個寄存器如下表二、串口通信STM32最多可以提供5路串口,其串口配置主要有以下步驟: (1)串口時鐘

7、使能15141312111098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOP GEN76543210QP FENOP EENIOP DENIOP CENIOP BENIOP AEN保留AFIOEN3130292827262524保留DACENP WRENBKPEN保留CANEN保留2322212019181716USBENI2C2ENI2C1ENUART5ENUART4ENUART3ENUART2EN保留15141312111098SPI3ENSP I2EN保留WWDGEN保留76543210保留TIM7ENTIM6ENTIM5ENTIM4EN

8、TIM3ENTIM2ENRCC_APB2ENR 的 0-15 位(1632 位保留)在寄存器RCC_APB2ENR里的第14位就是對串口 1的時鐘使能即:RCC_A PB2ENR|=114; 使能串口 1時鐘,那么除串口 1的時鐘使能在 RCC_A PB2ENR 外其余的時鐘使能位在寄存器RCC APB1ENR里,看下表:RCC_AP B1ENR例如:RCC_APB1ENR|=117; /使能串口 2時鐘,其余串口時鐘使能以此類推。(2)串口復位即結束復位STM32在使用串口時不管當前該串口出于什么狀態(tài)都先要將其復位,而復位后要將其 結束復位。串口復位主要在寄存器RCC_A PB2RSTR (

9、其余串口復位3130292827262524保留DACRSTP WRRSTBKPRST保留CANRST保留2322212019181716USBRSTI2C2RSTI2C1RSTUART5RSIUART4RSUART3RSIUART2RS保留15141312111098SPI3RSTSPI2RST保留WWDGRS保留76543210保留TIM7RSTTIM6RSTTIM5RSTTIM4RSTTIM3RSTTIM2TST151413|1211109|8DIV Ma ntissa11:476|5|432 1|0DIV Ma ntissa3:0DIV Fractio n3:0如:口 2復位(3)RC

10、C_A PB1RSTR (APB1外設復位寄存器)RCC_APB1RSTR|=117; / 復位串口 2RCC_APB1RSTR|=(1CR1|=0X200C;/1 位停止,無校驗位.0X200C=0010 0000 0000 1100B設置成使能串口 8個字長1個停止位(USART_CR2中13:12默認為“ 0”禁止校驗,禁止 校驗所有中斷,使能發(fā)送和接收。(5 )數(shù)據(jù)發(fā)送和接收15114II 13丨 12 111 10198保留DR87654321 10DR7:0USART_DR(數(shù)據(jù)寄存器)發(fā)送數(shù)據(jù)緩存寄存器(向它寫數(shù)據(jù)它會自動發(fā)送數(shù)據(jù)),當接收到數(shù)據(jù)時則存放接收的數(shù)據(jù)(6 )串口控制

11、1511141113121 111 1098保留CTSLBD76543210TXETCRXNELDLEORENEFEPEUSART SR參考程序:void uart_i nit(u32 p clk2,u32 bou nd) float temp;u16 man tissa;u16 fractio n;temp=(float)(pclk2*1000000)/(bound*16);/ 得到 USARTDIV man tissa=tem p;得到整數(shù)部分fraction=(temp-mantissa)*16; / 得到小數(shù)部分man tissaA PB2ENR|=1A PB2ENR|=1CR H&=

12、0XFFFFF00F;GPIO A-CRH|=0X000008B0;/IO 狀態(tài)設置RCC-A PB2RSTR|=1A PB2RSTR&=(1BRR=ma ntissa; / 波特率設置/1位停止,無校驗位./如果使能了接收/PE中斷使能/接收緩沖區(qū)非空中斷使能USART1-CR1|=0X200C;#ifdef EN_USART1_RX/使能接收中斷USART1-CR1|=1CR1|=1SR&(1DR;if(USART_RX_STA&0x80)=0)/ 接收未完成 if(USART_RX_STA&0 x40)/ 接收到了 0x0dif(res!=0x0a)USART_RX_STA=0;/ 接收

13、錯誤,重新開始 else USART_RX_STA|=0x80;/ 接收完成了else /還沒收到0X0Dif(res=0x0d)USART_RX_STA|=0x40;else USART_RX_BUFUSART_RX_STA&0 X3F=res;USART_RX_STA+;if(USART_RX_STA63)USART_RX_STA=0;/ 接收數(shù)據(jù)錯誤,重新開始接收以上兩個函數(shù)已經(jīng)封裝在usart.c中可直接調用三、外部中斷STM32的每一個IO 口都可以作為中斷輸入, 要想把IO 口作為中斷輸入則必須將IO 口設置成上拉/下拉輸入或浮空輸入(設置成浮空輸入時要接上拉或下拉電阻否則可能導致

14、中 斷不斷觸發(fā))。下面總結一下設置IO 口為外部中斷時的步驟:(1)將IO 口設置成輸入模式這個在第一章總結過,這里不多說。(2)開啟IO 口復用時鐘,設置IO 口與中斷線的映射關系這一步在函數(shù) void Ex_NVIC_Co nfig(u8 GP IOx,u8 BITx,u8 TRIM)中已經(jīng)封裝好可直接調用這里說一下IO 口的復用時鐘使能1098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENlOP GEN76543210OP FENOP EENlOP DENlOP CENlOP BENlOP AEN保留AFIOENRCC_

15、APB2ENRRCC_APB2ENR|=0X01;/使能 10 口復用時鐘(3) 開啟與該IO 口相對應的線上中斷/事件,并設置觸發(fā)條件這一步封裝在函數(shù) void Ex_NVIC_Co nfig(u8 GPI Ox,u8 BITx,u8 TRIM)中,可以直接調用,例如:Ex_NVIC_Config(GPIO_A,0,RTIR); / 設置 PA(0)上升沿觸發(fā)Ex_NVIC_Config(GPIO_A,13,FTIR);/ 設置 PA( 13)下降沿觸發(fā)(4) 配置中斷分組(NVIC )并使能中斷這一步封裝在函數(shù) void MY_NVIC_I ni t(u8 NVIC_ Preemp tio

16、 nP riority,u8 NVIC_Sub Priority,u8 NVIC_Cha nn el,u8 NVIC_Grou p) 里面可以直接調用,例如:MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);搶占 2,子優(yōu)先級 2,組 2為 LineOLine4這里值得注意的是 EXTI0、EXTI1、EXTI2、EXTI3、EXTI4EXTI15_10 為 Line15Line10EXTI9_5 為 Line9Line5(5) 編寫中斷服務函數(shù)例如: void EXTI15_10_IRQHa ndler(void)delay_ms(10);/ 消抖if(KEY0=0)

17、按鍵LED0=!LED0;else if(KEY1=0)/ 按鍵/清除 LINE13/清除 LINE15上的中斷標志位上的中斷標志位LED仁!LED1;EXTI- PR=1 PR=1A PB1ENR|=1APB1ENR|=1APB1ENR|=1APB1ENR|=0X01 ; /使能 TIME2 的時鐘使能;(RCC-APB1ENR|=1DIER|=1DIER|=1CR1|=0x01;/使能定時器 315114111312111098保留CC4OFCC3OFCC2OFCC1OF保留76543210BIFTIFCOMIFCC4IFCC3IFCC2IFCC1IFUIFTIMx_SR 該寄存器用來標記

18、當前預定時器相關的各種事件UIF :更新中斷標記,當產生更新事件時該位由硬件置 例如:if(TIM3-SR&0X0001)/ 溢出中斷(5) TIM3中斷分組設置例如:MY_NVIC_I ni t(1,3,TIM3_IRQCha nn el,2);/搶占直接調用該函數(shù)就行(6) 編寫中斷服務程序例如:void TIM3_IRQHa ndler(void)/中斷是否發(fā)生。11,子優(yōu)先級3,組2參考程丿予:if(TIM3-SR&0X0001)/ 溢出中斷 LED仁!LED1;TIM3-SR&=(1A PB1ENR|=1ARR=arr;時鐘使能/設定計數(shù)器自動重裝值 剛好1msTIM3-PSC=ps

19、c;預分頻器7200,得到10Khz的計數(shù)時鐘/允許更新中斷 /允許觸發(fā)中斷/使能定時器3這兩個東東要同時設置才可以使用中斷TIM3-DIER|=1DIER|=1CR1|=0x01;MY_NVIC_Init(1,3,TIM3_IRQChannel,2);/搶占 1,子優(yōu)先級 3,組 2TIMx_ARR確定頻率和由寄存器TIME2的CH2模式2的PWM輸出:15141312111098OC2CEOC2M2:0OC2 PEOC2FEIC2F3:0IC2 PSC1:0CC2S1:0765 143210OC1CEOC1M2:0OC1 PE OC1FEIC1F3:0IC1 PSC1:0CC1S1:0脈沖

20、寬度調制模式可以產生一個由寄存器TIMx_CCRx確定其占空比的 PWM波形; 使能定時器:RCC-APB1ENR|=1CCMR1|=7vv12;/選擇 PWM 模式 2使能預裝載寄存器:必須設置TIMx_CCMRx寄存器OCX PE位以使能相應的預裝載寄存器;15141312111098OC2CEOC2M2:0OC2 PEOC2FEIC2F3:0IC2 PSC1:0CC2S1:076543210OC1CEOC1M2:0OC1 PE OC1FEIC1F3:0IC1 PSC1:0CC1S1:0TIMx_CCMR1(捕獲/比較模式寄存器1)TIM2-CCMR1|=1VV11;/使能預裝載寄存器使能

21、自動重裝載的預裝載寄存器:最后還要設置TIMx_CR1寄存器的ARPE位,(在向上計數(shù)或中心對稱模式中)使能自動重裝載的預裝載寄存器;1514丨131 12 11 11109 11 8保留CKD1:076 1543210ARPECMS1:0DIROPMURSUDISCENTIMx_CR1TIMx_CR1|=lvv7;/使能自動裝載的預分頻寄存器設置極性:OCX的極性可以通過軟件在 TIMx_CCER寄存器中的CCxP位設置,它可以 設置為高電平有效或低電平有效。TIMx_CCER寄存器中的CCxE位控制OCx輸出使能;151413 11 121111098保留CC4 PCC4E保留CC3 PC

22、C3E71 6543210保留CC2 PCC2E保留CC1PCC1ETIMx_CCER(捕獲/比較使能寄存器) TIM2-CCER&=0X03; TIM2-CCMR|=1vv4;/ /設置極性并輸出時能void Timerx2_I nit(u16 arr,u16 psc)RCC-APB1ENR|=1ARR=arr;/設定計數(shù)器自動重裝值TIM3-PSC=psc;/預分頻器不分頻/選擇PWM模式2/使能預裝載寄存器/使能自動裝載的預分頻寄存器/使能定時器TIM2-CCMR1|=7CCMR1|=1CR1|=1CR1|=1CCER=0X3303;TIM2-CCER|=1A PB1ENR|=1CRL&

23、=0X0FFFFFFF;/ PA7 輸出GPIOA-CRL|=0XB0000000;/ 復用功能輸出GPI OA-ODR|=1ARR=arr;/設定計數(shù)器自動重裝值TIM3-PSC=psc;/預分頻器不分頻 TIM3-CCMR1|=7CCMR1|=1CCER|=1CR1=0x8000;TIM3-CR1|=0x01;其余幾個定時器的 PWM輸出寄存器配置依次類推。獲計數(shù)器的值到TIM1_CCR1寄存器中,步以下例子說明如何在TI1輸入的上升沿時捕 驟如下:1使能TIM1時鐘:15141312111098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOP

24、 GEN76543210OP FENOP EENIOP DENIOP CENIOP BENIOP AEN保留AFIOENRCC_APB2ENR 的 0-15 位(0632 位保留)RCC-APB2ENR|=1CCMR 1 =0X01;/CC1通道選擇輸入,IC1映射在TI1上3、根據(jù)輸入信號的特點,配置輸入濾波器為所需的帶寬(輸入為TI1時TIM1_CCMRx寄存器中的ICxF位)。假設輸入信號在最多 5個時鐘周期的時間內抖動,我們.配置濾波器的帶長于5個時鐘周期。因此我們可以(以 fDTS頻率)連續(xù)采樣8次,已確認在TI1上一次 真實的邊沿變換,即在 TIM1 CCMR1寄存器中寫入IC仆=

25、0011.15141312111098OC2CEOC2M2:0OC2 PEOC2FEIC2F3:0IC2 PSC1:0CC2S1:076543210OC1CEOC1M2:0OC1 PEOC1FEIC1F3:0IC1 PSC1:0CC1S1:0TIM1_CCMR1(捕獲/比較模式寄存器 1)TIM1-CCMR1|=3CCER&=0CCER|=1DIER|=1DIER|=1A PB2ENR|=1A PB2ENR|=1CHL&=OXFFFFFFFO;RCC-CHL|=0X00000004;/設置PA8為浮空輸入TIM1-ARR=arr ;TIM1-PSC=psc ;TIM1-CCMR1=0X01;

26、/CC1TIM1-CCMR1|=3CCER&=0CCER|=1DIER|=1DIER|=1CR1|=1A PB2ENR|=1A PB2ENR|=1CR1|=0CR1|=1CR1|=1CR1|=1CR1|=0CR1|=1CR1|=1CR1|=7CR1|=0CR1|=1A PB2ENR|=1A PB2ENR|=1CRL&=0X000FFFFF;GPI OA-CRL|=0XBBB00000;/ PA567 復用GPIOA-ODR|=0X7CR1|=0CR1|=1CR1|=1CR1|=1CR1|=0CR1|=1CR1|=1CR1|=7CR1|=0CR1|=1SR&1SR&1SR&1300)return 0;/若經(jīng)判斷發(fā)送緩沖區(qū)不為空則返回值“0 ”SPI-DR=Txdata;若發(fā)送緩沖區(qū)為空則發(fā)送數(shù)據(jù)temp=0;while(S PI-SR&1SR

溫馨提示

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

最新文檔

評論

0/150

提交評論