STM32F1系列之常用外設說明

1RCC相關:

 

APB2啓動時鐘項:

RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,

               RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,

               RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,

               RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,

               RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,

               RCC_APB2Periph_ALL

 

APB2啓動函數:  

RCC_APB2PeriphClockCmd(XX,ENABLE);

 

APB1啓動時鐘項:

RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4,

                      RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7,

                      RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3,

                     RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4,

                      RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2,

                      RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, RCC_APB1Periph_BKP,

                     RCC_APB1Periph_PWR, RCC_APB1Periph_DAC, RCC_APB1Periph_ALL

 

APB1啓動函數:  

RCC_APB2PeriphClockCmd(XX,ENABLE);

 

AHB啓動時鐘項:

RCC_AHBPeriph_DMA1

RCC_AHBPeriph_DMA2

RCC_AHBPeriph_SRAM

RCC_AHBPeriph_FLITF

RCC_AHBPeriph_CRC

RCC_AHBPeriph_FSMC

RCC_AHBPeriph_SDIO

 

AHB啓動函數:    

RCC_AHBPeriphClockCmd (XX,ENABLE);


 

2GPIO相關:

GPIO模式:

GPIO_Mode_AIN:模擬輸入                                      GPIO_Mode_IN_FLOATING:浮空輸入

         GPIO_Mode_IPD:下拉輸入                                GPIO_Mode_IPU:上拉輸入

        GPIO_Mode_Out_OD:開漏輸出                    GPIO_Mode_Out_PP:推輓輸出

         GPIO_Mode_AF_OD:複用開漏輸出             GPIO_Mode_AF_PP:複用推輓輸出

 

GPIO速度:

GPIO_Speed_2MHz

GPIO_Speed_10MHz

GPIO_Speed_50MHz

 

GPIO引腳聲明:

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x;                   x1~15或者all

 

GPIO初始化函數:

GPIO_Init(GPIOx, &GPIO_InitStructure);                           xA~G

 

 

注:需要定義GPIO結構體變量,GPIO_InitTypeDef  GPIO_InitStructure;


 

3ADC相關

最好需要重新初始化:ADC_DeInit(ADCx);

 

ADC工作模式選擇:

ADC_Mode_Independent:獨立工作      

ADC_Mode_RegInjecSimult:混合同步+注入同步    

ADC_Mode_RegSimult_AlterTrig:混合同步+交替觸發

ADC_Mode_InjecSimult_FastInterl:混合同步+快速交替

ADC_Mode_InjecSimult_SlowInterl:混合同步+慢速交替

ADC_Mode_InjecSimult:注入同步      

ADC_Mode_RegSimult:規則同步

ADC_Mode_FastInterl:快速交替    

ADC_Mode_SlowInterl:慢速交替

ADC_Mode_AlterTrig:交替觸發

通過ADC_InitStructure.ADC_Mode = XX進行賦值

 

ADC掃描使能:

                   ADC_InitStructure.ADC_ScanConvMode = ENABLE;

 

ADC連續 /單次模式選擇:

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

 

ADC轉換控制方式:

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//有軟件控制轉換

 

ADC數據對齊方式:ADC_DataAlign_Right:右對齊 /  ADC_DataAlign_Right:左對齊

                   ADC_InitStructure.ADC_DataAlign =XX

 

ADC轉換通道數:

                   ADC_InitStructure.ADC_NbrOfChannel = X                     // X=1~16

 

ADC初始化函數:

                   ADC_Init(ADCx, &ADC_InitStructure);

 

注:在開始要定義結構體變量     ADC_InitTypeDef   ADC_InitStructure

 

是否使能ADCx DMA

                  ADC_DMACmd(ADCx, ENABLE);

使能ADCx

                  ADC_Cmd(ADCx, ENABLE);

 

 

初始化ADC1校準寄存器:

                            ADC_ResetCalibration(ADCx);

檢測ADC1校準寄存器初始化是否完成:

                            while(ADC_GetResetCalibrationStatus(ADCx));

開始校準ADC1

                            ADC_StartCalibration(ADCx);

檢測是否完成校準:

                            while(ADC_GetCalibrationStatus(ADCx));

ADC1轉換軟件啓動:

                            ADC_SoftwareStartConvCmd(ADCx, ENABLE);


 

4DMA相關:

復位通道:

DMA_DeInit(DMAy_Channelx);//復位DMAy通道xy=1時,x=1~7y=2時,x=1~5

 

定義外設基地址,全局變量:

                                      DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;//地址自己定義

如:#define ADC1_DR_Address    ((u32)0x4001244C)

 

定義DMA存儲器地址,全局變量u32

                                      DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; //定義DMA通道存儲器地址

如:volatile unsigned  short int  ADC_ConvertedValue[8];

 

DMA外設方向:

DMA_InitStructure.DMA_DIR = XX

DMA_DIR_PeripheralSRC:外設爲數據傳輸的來源,DMA_DIR_PeripheralDST:外設爲數據傳輸的目的地

 

DMA傳輸數量寄存器值,即緩存大小,單位由MemoryDataSizePeripheralDataSize決定:

DMA_InitStructure.DMA_BufferSize = x;

//定義DMA緩衝區大小x,如8通道ADC,則x就爲8

 

DMA外設地址寄存器變不變:

                                     DMA_InitStructure.DMA_PeripheralInc = x;

DMA_PeripheralInc_Disable:外設地址寄存器不變 DMA_PeripheralInc_Enable:外設地址寄存器遞增

                  

 

DMA內存地址寄存器變不變:

                                     DMA_InitStructure.DMA_MemoryInc = X;

DMA_MemoryInc_Disable:內存地址寄存器不變 DMA_MemoryInc_Enable:內存地址寄存器遞增

                  

外設數據寬度:

                                     DMA_InitStructure.DMA_PeripheralDataSize = X;

DMA_PeripheralDataSize_Byte              數據寬度爲8

DMA_PeripheralDataSize_HalfWord        數據寬度爲16

DMA_PeripheralDataSize_Word                    數據寬度爲32

 

存儲器數據寬度:

                   DMA_InitStructure.DMA_MemoryDataSize = X;

DMA_MemoryDataSize_Byte                           數據寬度爲8

DMA_MemoryDataSize_HalfWord           數據寬度爲16

DMA_MemoryDataSize_Word              數據寬度爲32

 

模式選擇:

DMA_InitStructure.DMA_Mode =x;

DMA_Mode_Circular: 循環模式

DMA_Mode_Normal:正常模式

                  

通道軟件優先級設置:

                   DMA_InitStructure.DMA_Priority =x;

DMA_Priority_VeryHigh                    最高優先級

DMA_Priority_High                       高優先級

DMA_Priority_Medium                   中優先級

DMA_Priority_Low                       低優先級

                  

DMA內存到內存的傳輸使能:

                   DMA_InitStructure.DMA_M2M = x

DMA_M2M_Enable:使能

DMA_M2M_Disable:未使能

 

DMA初始化函數:

                   DMA_Init(DMAy_Channelx ,  &DMA_InitStructure);

DMA通道使能函數:

DMA_Cmd(DMAy_Channelx ,  ENABLE); //使能DMA通道1

 

注:在開始要定義結構體變量     DMA_InitTypeDef   DMA_InitStructure


 

5NVIC相關:

優先級組設定:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_x);

NVIC_PriorityGroup_0:          0 bits for pre-emption priority

                                                       4 bits for subpriority

NVIC_PriorityGroup_1:           1 bits for pre-emption priority

3 bits for subpriority

NVIC_PriorityGroup_2:           2 bits for pre-emption priority

2 bits for subpriority

NVIC_PriorityGroup_3:           3 bits for pre-emption priority

1 bits for subpriority

NVIC_PriorityGroup_4:           4 bits for pre-emption priority

0 bits for subpriority

 

設置中斷:

NVIC_InitStructure.NVIC_IRQChannel =x;

ADC1_2_IRQn =  18,                        /*!< ADC1 and ADC2 global Interrupt*/

USB_HP_CAN1_TX_IRQn = 19,       /*!< USB Device High Priority or CAN1 TX Interrupts  */

USB_LP_CAN1_RX0_IRQn = 20,     /*!< USB Device Low Priority or CAN1 RX0 Interrupts */

CAN1_RX1_IRQn = 21,                /*!< CAN1 RX1 Interrupt*/

CAN1_SCE_IRQn = 22,                       /*!<CAN1 SCE Interrupt*/

EXTI9_5_IRQn = 23,                     /*!< External Line[9:5] Interrupts*/

TIM1_BRK_IRQn = 24,                 /*!< TIM1 Break Interrupt*/

TIM1_UP_IRQn = 25,                   /*!< TIM1 Update Interrupt*/

TIM1_TRG_COM_IRQn = 26,                   /*!< TIM1 Trigger and Commutation Interrupt*/

TIM1_CC_IRQn = 27,                   /*!< TIM1 Capture Compare Interrupt*/

TIM2_IRQn = 28,                           /*!< TIM2 global Interrupt */

TIM3_IRQn = 29,                           /*!< TIM3 global Interrupt */

TIM4_IRQn = 30,                           /*!< TIM4 global Interrupt*/

I2C1_EV_IRQn = 31,                     /*!< I2C1 Event Interrupt*/

I2C1_ER_IRQn = 32,                     /*!< I2C1 Error Interrupt*/

I2C2_EV_IRQn  = 33,                 /*!< I2C2 Event Interrupt */

I2C2_ER_IRQn = 34,                     /*!< I2C2 Error Interrupt */

SPI1_IRQn = 35,                             /*!< SPI1 global Interrupt*/

SPI2_IRQn = 36,                             /*!< SPI2 global Interrupt*/

USART1_IRQn = 37,                      /*!< USART1 global Interrupt*/

USART2_IRQn = 38,                      /*!< USART2 global Interrupt*/

USART3_IRQn  = 39,                  /*!< USART3 global Interrupt*/

EXTI15_10_IRQn = 40,                 /*!< External Line[15:10] Interrupts*/

RTCAlarm_IRQn = 41,                   /*!< RTC Alarm through EXTI Line Interrupt*/

USBWakeUp_IRQn = 42, /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */

TIM8_BRK_IRQn = 43,                 /*!< TIM8 Break Interrupt */

TIM8_UP_IRQn = 44,                   /*!< TIM8 Update Interrupt\*/

TIM8_TRG_COM_IRQn = 45,        /*!< TIM8 Trigger and Commutation Interrupt

TIM8_CC_IRQn = 46,                   /*!< TIM8 Capture Compare Interrupt*/

ADC3_IRQn = 47,                          /*!< ADC3 global Interrupt*/

FSMC_IRQn = 48,                          /*!< FSMC global Interrupt */

SDIO_IRQn = 49,                             /*!< SDIO global Interrupt\*/

TIM5_IRQn = 50,                           /*!< TIM5 global Interrupt*/

SPI3_IRQn = 51,                             /*!< SPI3 global Interrupt*/

UART4_IRQn = 52,                                 /*!< UART4 global Interrupt */

UART5_IRQn = 53,                                 /*!< UART5 global Interrupt */

TIM6_IRQn = 54,                           /*!< TIM6 global Interrupt */

TIM7_IRQn = 55,                           /*!< TIM7 global Interrupt */

DMA2_Channel1_IRQn = 56,           /*!< DMA2 Channel 1 global Interrupt*/

DMA2_Channel2_IRQn = 57,          /*!< DMA2 Channel 2 global Interrupt */

DMA2_Channel3_IRQn = 58,          /*!< DMA2 Channel 3 global Interrupt*/

DMA2_Channel4_5_IRQn = 59,     /*!< DMA2 Channel 4 and Channel 5 global Interrupt*/

 

設置搶佔優先級:

                   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =X;       //搶佔優先級 X

 

設置子優先級爲:

                   NVIC_InitStructure.NVIC_IRQChannelSubPriority =X;                      //搶佔優先級 X

 

使能中斷:

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                    //使能

 

NVIC初始化函數:

NVIC_Init(&NVIC_InitStructure);

 

 

注:在開始時需要定義結構體變量NVIC_InitTypeDef NVIC _InitStructure;


 

6USART相關:

USART波特率選擇:

                   USART_InitStructure.USART_BaudRate =XX;                    //波特率爲XX bps

 

數據位位數選擇:

                   USART_InitStructure.USART_WordLength = USART_WordLength_Xb; 

//X8或者9,即8位或者9位數據位

 

停止位位數選擇:

USART_InitStructure.USART_StopBits = USART_StopBits_1;                   //停止位1

#define USART_StopBits_1                     ((uint16_t)0x0000)

#define USART_StopBits_0_5                   ((uint16_t)0x1000)

#define USART_StopBits_2                     ((uint16_t)0x2000)

#define USART_StopBits_1_5                   ((uint16_t)0x3000)

 

有無校驗位選擇:

                   USART_InitStructure.USART_Parity = USART_Parity_No;                //無校驗位

#define USART_Parity_No                      ((uint16_t)0x0000)

#define USART_Parity_Even                    ((uint16_t)0x0400)

#define USART_Parity_Odd                     ((uint16_t)0x0600)

 

有無硬件流控選擇:

         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

                                                                                             //無硬件流控

#define USART_HardwareFlowControl_None       ((uint16_t)0x0000)

#define USART_HardwareFlowControl_RTS        ((uint16_t)0x0100)

#define USART_HardwareFlowControl_CTS        ((uint16_t)0x0200)

#define USART_HardwareFlowControl_RTS_CTS    ((uint16_t)0x0300)

 

模式選擇:

                   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收發模式

#define USART_Mode_Rx                        ((uint16_t)0x0004)

#define USART_Mode_Tx                        ((uint16_t)0x0008)

 

配置串口參數函數:

                   USART_Init(USARTx, &USART_InitStructure);        

USARTx 可選:USART1, USART2, USART3, UART4 or UART5

 

注:在開始時需要定義結構體變量USART_InitTypeDef   USART_InitStruct;

 

使能接收中斷:

USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);   

 

使能發送緩衝空中斷:

USART_ITConfig(USARTx, USART_IT_TXE, ENABLE);

 

使能發送完成中斷:

USART_ITConfig(USARTx, USART_IT_TC, ENABLE)

 

使能USART

USART_Cmd(USARTx, ENABLE);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章