你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F1系列之常用外设说明

[复制链接]
STMCU小助手 发布时间:2021-11-29 23:01
1、RCC相关:

APB2启动时钟项:
  1. RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,

  2.                RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,

  3.                RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,

  4.                RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,

  5.                RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,

  6.                RCC_APB2Periph_ALL
复制代码

APB2启动函数:  
  1. RCC_APB2PeriphClockCmd(XX,ENABLE);
复制代码


APB1启动时钟项:
  1. RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4,

  2.                       RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7,

  3.                       RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3,

  4.                      RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4,

  5.                       RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2,

  6.                       RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, RCC_APB1Periph_BKP,

  7.                      RCC_APB1Periph_PWR, RCC_APB1Periph_DAC, RCC_APB1Periph_ALL
复制代码

APB1启动函数:  
  1. RCC_APB2PeriphClockCmd(XX,ENABLE);
复制代码

AHB启动时钟项:
  1. RCC_AHBPeriph_DMA1

  2. RCC_AHBPeriph_DMA2

  3. RCC_AHBPeriph_SRAM

  4. RCC_AHBPeriph_FLITF

  5. RCC_AHBPeriph_CRC

  6. RCC_AHBPeriph_FSMC

  7. RCC_AHBPeriph_SDIO
复制代码

AHB启动函数:   
  1. RCC_AHBPeriphClockCmd (XX,ENABLE);
复制代码

2、GPIO相关:
GPIO模式:
  1. GPIO_Mode_AIN:模拟输入                                      GPIO_Mode_IN_FLOATING:浮空输入

  2.          GPIO_Mode_IPD:下拉输入                                GPIO_Mode_IPU:上拉输入

  3.         GPIO_Mode_Out_OD:开漏输出                    GPIO_Mode_Out_PP:推挽输出

  4.          GPIO_Mode_AF_OD:复用开漏输出             GPIO_Mode_AF_PP:复用推挽输出
复制代码

GPIO速度:

  1. GPIO_Speed_2MHz

  2. GPIO_Speed_10MHz

  3. GPIO_Speed_50MHz
复制代码

GPIO引脚声明:
  1. <span style="background-color: rgb(255, 255, 255);">G</span>PIO_InitStructure.GPIO_Pin = GPIO_Pin_x;                   x:1~15或者all
复制代码

GPIO初始化函数:
  1. GPIO_Init(GPIOx, &GPIO_InitStructure);                           x:A~G
复制代码
注:需要定义GPIO结构体变量,GPIO_InitTypeDef  GPIO_InitStructure;

3、ADC相关
最好需要重新初始化:ADC_DeInit(ADCx);

ADC工作模式选择:
  1. ADC_Mode_Independent:独立工作      

  2. ADC_Mode_RegInjecSimult:混合同步+注入同步   

  3. ADC_Mode_RegSimult_AlterTrig:混合同步+交替触发

  4. ADC_Mode_InjecSimult_FastInterl:混合同步+快速交替

  5. ADC_Mode_InjecSimult_SlowInterl:混合同步+慢速交替

  6. ADC_Mode_InjecSimult:注入同步      

  7. ADC_Mode_RegSimult:规则同步

  8. ADC_Mode_FastInterl:快速交替   

  9. ADC_Mode_SlowInterl:慢速交替

  10. ADC_Mode_AlterTrig:交替触发

  11. 通过ADC_InitStructure.ADC_Mode = XX进行赋值
复制代码

ADC扫描使能:
  1. ADC_InitStructure.ADC_ScanConvMode = ENABLE;
复制代码

ADC连续 /单次模式选择:
  1. ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
复制代码

ADC转换控制方式:
  1. ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//有软件控制转换
复制代码

ADC数据对齐方式;
  1. ADC_DataAlign_Right:右对齐 /  ADC_DataAlign_Right:左对齐

  2. ADC_InitStructure.ADC_DataAlign =XX
复制代码

ADC转换通道数:        
  1. ADC_InitStructure.ADC_NbrOfChannel = X                     // X=1~16
复制代码

ADC初始化函数:           
  1. ADC_Init(ADCx, &ADC_InitStructure);
复制代码
注:在开始要定义结构体变量     ADC_InitTypeDef   ADC_InitStructure

是否使能ADCx DMA :           
  1.   ADC_DMACmd(ADCx, ENABLE);
复制代码

使能ADCx:
  1. ADC_Cmd(ADCx, ENABLE);
复制代码

初始化ADC1校准寄存器:
  1. ADC_ResetCalibration(ADCx);
复制代码

检测ADC1校准寄存器初始化是否完成:
  1. while(ADC_GetResetCalibrationStatus(ADCx));
复制代码

开始校准ADC1:                        
  1. ADC_StartCalibration(ADCx);
复制代码

检测是否完成校准:
  1. while(ADC_GetCalibrationStatus(ADCx));
复制代码

ADC1转换软件启动:                        
  1. ADC_SoftwareStartConvCmd(ADCx, ENABLE);
复制代码

4、DMA相关:
复位通道:
  1. DMA_DeInit(DMAy_Channelx);//复位DMAy通道x,y=1时,x=1~7;y=2时,x=1~5
复制代码

定义外设基地址,全局变量:
  1. DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;//地址自己定义
复制代码
如:#define ADC1_DR_Address    ((u32)0x4001244C)

定义DMA存储器地址,全局变量u32
  1. DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; //定义DMA通道存储器地址
复制代码
如:volatile unsigned  short int  ADC_ConvertedValue[8];

DMA外设方向:
  1. DMA_InitStructure.DMA_DIR = XX;
复制代码
DMA_DIR_PeripheralSRC:外设为数据传输的来源,DMA_DIR_PeripheralDST:外设为数据传输的目的地

DMA传输数量寄存器值,即缓存大小,单位由MemoryDataSize或PeripheralDataSize决定:

DMA_InitStructure.DMA_BufferSize = x;

//定义DMA缓冲区大小x,如8通道ADC,则x就为8

DMA外设地址寄存器变不变:
  1. DMA_InitStructure.DMA_PeripheralInc = x;
复制代码

DMA_PeripheralInc_Disable:外设地址寄存器不变 DMA_PeripheralInc_Enable:外设地址寄存器递增

DMA内存地址寄存器变不变:
  1. DMA_InitStructure.DMA_MemoryInc = X;
复制代码

DMA_MemoryInc_Disable:内存地址寄存器不变 DMA_MemoryInc_Enable:内存地址寄存器递增

外设数据宽度:
  1. DMA_InitStructure.DMA_PeripheralDataSize = X;
复制代码

DMA_PeripheralDataSize_Byte              数据宽度为8位

DMA_PeripheralDataSize_HalfWord        数据宽度为16位

DMA_PeripheralDataSize_Word                    数据宽度为32位


存储器数据宽度:
  1. DMA_InitStructure.DMA_MemoryDataSize = X;
复制代码

DMA_MemoryDataSize_Byte                           数据宽度为8位

DMA_MemoryDataSize_HalfWord           数据宽度为16位

DMA_MemoryDataSize_Word              数据宽度为32位


模式选择:
  1. DMA_InitStructure.DMA_Mode =x;
复制代码

DMA_Mode_Circular: 循环模式

DMA_Mode_Normal:正常模式


通道软件优先级设置:
  1. DMA_InitStructure.DMA_Priority =x;
复制代码

DMA_Priority_VeryHigh                    最高优先级

DMA_Priority_High                       高优先级

DMA_Priority_Medium                   中优先级

DMA_Priority_Low                       低优先级


DMA内存到内存的传输使能:  
  1. DMA_InitStructure.DMA_M2M = x
复制代码

DMA_M2M_Enable:使能

DMA_M2M_Disable:未使能


DMA初始化函数:
  1. DMA_Init(DMAy_Channelx ,  &DMA_InitStructure);
复制代码

DMA通道使能函数:
  1. DMA_Cmd(DMAy_Channelx ,  ENABLE); //使能DMA通道1
复制代码
注:在开始要定义结构体变量     DMA_InitTypeDef   DMA_InitStructure


5、NVIC相关:
优先级组设定:
  1. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_x);

  2. NVIC_PriorityGroup_0:          0 bits for pre-emption priority

  3.                                                        4 bits for subpriority

  4. NVIC_PriorityGroup_1:           1 bits for pre-emption priority

  5. 3 bits for subpriority

  6. NVIC_PriorityGroup_2:           2 bits for pre-emption priority

  7. 2 bits for subpriority

  8. NVIC_PriorityGroup_3:           3 bits for pre-emption priority

  9. 1 bits for subpriority

  10. NVIC_PriorityGroup_4:           4 bits for pre-emption priority

  11. 0 bits for subpriority
复制代码

设置中断:

  1. NVIC_InitStructure.NVIC_IRQChannel =x;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  43. DMA2_Channel4_5_IRQn = 59,     /*!< DMA2 Channel 4 and Channel 5 global Interrupt*/
复制代码

设置抢占优先级:
  1. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =X;       //抢占优先级 X
复制代码

设置子优先级为:
  1. NVIC_InitStructure.NVIC_IRQChannelSubPriority =X;                      //抢占优先级 X
复制代码

使能中断:
  1. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                    //使能
复制代码

NVIC初始化函数:
  1. NVIC_Init(&NVIC_InitStructure);
复制代码
注:在开始时需要定义结构体变量NVIC_InitTypeDef NVIC _InitStructure;



6、USART相关:
USART波特率选择:
  1. USART_InitStructure.USART_BaudRate =XX;                    //波特率为XX bps
复制代码

数据位位数选择:
  1. USART_InitStructure.USART_WordLength = USART_WordLength_Xb;
复制代码

停止位位数选择:
  1. USART_InitStructure.USART_StopBits = USART_StopBits_1;                   //停止位1位

  2. #define USART_StopBits_1                     ((uint16_t)0x0000)

  3. #define USART_StopBits_0_5                   ((uint16_t)0x1000)

  4. #define USART_StopBits_2                     ((uint16_t)0x2000)

  5. #define USART_StopBits_1_5                   ((uint16_t)0x3000)
复制代码

有无校验位选择:
  1. USART_InitStructure.USART_Parity = USART_Parity_No;                //无校验位

  2. #define USART_Parity_No                      ((uint16_t)0x0000)

  3. #define USART_Parity_Even                    ((uint16_t)0x0400)

  4. #define USART_Parity_Odd                     ((uint16_t)0x0600)
复制代码

有无硬件流控选择:
  1. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

  2.                                                                                              //无硬件流控

  3. #define USART_HardwareFlowControl_None       ((uint16_t)0x0000)

  4. #define USART_HardwareFlowControl_RTS        ((uint16_t)0x0100)

  5. #define USART_HardwareFlowControl_CTS        ((uint16_t)0x0200)

  6. #define USART_HardwareFlowControl_RTS_CTS    ((uint16_t)0x0300)
复制代码

模式选择:

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

  2. #define USART_Mode_Rx                        ((uint16_t)0x0004)

  3. #define USART_Mode_Tx                        ((uint16_t)0x0008)
复制代码

配置串口参数函数:
  1. USART_Init(USARTx, &USART_InitStructure);        

  2. USARTx 可选:USART1, USART2, USART3, UART4 or UART5
复制代码
注:在开始时需要定义结构体变量USART_InitTypeDef   USART_InitStruct;

使能接收中断:
  1. USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);   
复制代码

使能发送缓冲空中断:
  1. USART_ITConfig(USARTx, USART_IT_TXE, ENABLE);
复制代码

使能发送完成中断:
  1. USART_ITConfig(USARTx, USART_IT_TC, ENABLE)
复制代码

使能USART:
  1. USART_Cmd(USARTx, ENABLE);
复制代码




收藏 评论0 发布时间:2021-11-29 23:01

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版