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

【经验分享】STM32F2系列外设设置规则

[复制链接]
STMCU小助手 发布时间:2021-12-4 17:03
外设设置规则:
在配置之前必须添加外设的.c文件,以及相应包含的.h。.h文件在stm32f2xx_conf.h中添加。

1、  时钟设置:包括引脚时钟和外设时钟:

RCC_XXXPeriphClockCmd();

2、  引脚连接:即把引脚和外设功能进行连接;

GPIO_PinAFConfig();

如下功能需要引脚与外设连接。

  *     @arg GPIO_AF_RTC_50Hz

  *     @arg GPIO_AF_MCO

  *     @arg GPIO_AF_TAMPER

  *     @arg GPIO_AF_SWJ

  *     @arg GPIO_AF_TRACE

  *     @arg GPIO_AF_TIM1

  *     @arg GPIO_AF_TIM2

  *     @arg GPIO_AF_TIM3

  *     @arg GPIO_AF_TIM4

  *     @arg GPIO_AF_TIM5

  *     @arg GPIO_AF_TIM8

  *     @arg GPIO_AF_TIM9

  *     @arg GPIO_AF_TIM10

  *     @arg GPIO_AF_TIM11

  *     @arg GPIO_AF_I2C1

  *     @arg GPIO_AF_I2C2

  *     @arg GPIO_AF_I2C3

  *     @arg GPIO_AF_SPI1

  *     @arg GPIO_AF_SPI2

  *     @arg GPIO_AF_SPI3

  *     @arg GPIO_AF_USART1

  *     @arg GPIO_AF_USART2

  *     @arg GPIO_AF_USART3

  *     @arg GPIO_AF_UART4

  *     @arg GPIO_AF_UART5

  *     @arg GPIO_AF_USART6

  *     @arg GPIO_AF_CAN1

  *     @arg GPIO_AF_CAN2

  *     @arg GPIO_AF_TIM12

  *     @arg GPIO_AF_TIM13

  *     @arg GPIO_AF_TIM14

  *     @arg GPIO_AF_OTG1_FS

  *     @arg GPIO_AF_OTG2_HS

  *     @arg GPIO_AF_ETH

  *     @arg GPIO_AF_FSMC

  *     @arg GPIO_AF_OTG2_FS

  *     @arg GPIO_AF_SDIO

  *     @arg GPIO_AF_DCMI

  *     @arg GPIO_AF_EVENTOUT

3、  初始化GPIO配置:

GPIO_Init();

4、  外设初始化:

如UART初始化如下:

  1. USART_InitStructure.USART_BaudRate = 115200;

  2. USART_InitStructure.USART_WordLength = USART_WordLength_8b;

  3. USART_InitStructure.USART_StopBits = USART_StopBits_1;

  4. USART_InitStructure.USART_Parity = USART_Parity_No;

  5. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

  6. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  7. USART_Init(USARTx, &USART_InitStructure);
复制代码


ADC初始化如下:(多路模式)

  1. // DMA1_Stream0 channel0 configuration **************************************/

  2.   DMA_DeInit(DMA2_Stream0);

  3.   DMA_InitStructure.DMA_Channel = DMA_Channel_0;

  4.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;    //定义外设基址

  5.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue;  //定义寄存器基址

  6.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;                               //定义DMA传输模式从外设到内存

  7.   DMA_InitStructure.DMA_BufferSize = 4;                                                                              //定义buffer大小,根据通道数来定

  8.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                    //外设地址寄存器不变

  9.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                        //DMA寄存器随之增加(单通道不增加)

  10.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //DMA外设数据大小,16位半字

  11.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;           //DMA存储器数据大小,16位半字

  12.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                    //模式为循环模式

  13.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;                     //DMA优先级高

  14.   DMA_InitStructure.DMA_DirectMode = DMA_DirectMode_Disable;       //直接传输模式无效  DMA_InitStructure.DMA_FifoThreshold = DMA_FifoThreshold_HalfFull;

  15.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;

  16.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

  17.   DMA_Init(DMA2_Stream0, &DMA_InitStructure);
复制代码
  1. //************ DMA2_Stream0 enable ************/

  2.   DMA_Cmd(DMA2_Stream0, ENABLE);                          //使能DMA流0
复制代码
  1. //***************** ADCs DeInit ***************/

  2.   ADC_DeInit();                //ADC重初始化
复制代码
  1. //************* ADC Common Init ****************/

  2.   ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;       //ADC独立模式

  3.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;                   //ADC采样周期2分频

  4.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;

  5.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //采样周期

  6.   ADC_CommonInit(&ADC_CommonInitStructure);              //基本初始化
复制代码
  1. //*************** ADC1 Init ********************/

  2.        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;                  //ADC采样精度

  3.        ADC_InitStructure.ADC_ScanConvMode = ENABLE;                         //采用扫描模式,因为多路

  4.        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;            //连续扫描模式

  5.        ADC_InitStructure.ADC_ExternalTrigConvPolarity = ADC_ExternalTrigConvPolarity_None;//无外部触发

  6.        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                           //数据右对齐

  7.        ADC_InitStructure.ADC_NbrOfChannel = 4;                                                 //采样通道数

  8.        ADC_Init(ADC1, &ADC_InitStructure);
复制代码
  1. //************ ADC1 regular channel12 configuration ************/

  2.          ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_3Cycles);

  3.          ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_3Cycles);

  4.          ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 3, ADC_SampleTime_3Cycles);

  5.          ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 4, ADC_SampleTime_3Cycles);
复制代码
  1. //********* Enable DMA request after last transfer (Multi-ADC mode) *********/

  2.        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
复制代码
  1. //*********** Enable ADC1 DMA ****************/

  2.        ADC_DMACmd(ADC1, ENABLE);
复制代码
  1. //*************** Enable ADC1 ***************/

  2.        ADC_Cmd(ADC1, ENABLE);
复制代码

  1. //******* Start ADC1 Software Conversion *****/

  2.        ADC_SoftwareStartConv(ADC1);                       //软启动开始采样
复制代码


5、  中端配置:

以下为串口中断配置:

  1. void NVIC_Configuration(void)

  2. {

  3.    NVIC_InitTypeDef NVIC_InitStructure;



  4.   /* Configure the NVIC Preemption Priority Bits */

  5.   /* Configure one bit for preemption priority */

  6.   /* 优先级组说明了抢占优先级所用的位数,和子优先级所用的位数   在这里是1, 7 */   

  7.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);              



  8.   /* Enable the USART1 Interrupt */

  9.   NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;                                    //设置串口5中断

  10.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;             //抢占优先级 0

  11.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                   //子优先级为0

  12.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                            //使能

  13.   NVIC_Init(&NVIC_InitStructure);

  14. }

  15. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);           //使能接收中断

  16. USART_ITConfig(USART1, USART_IT_TXE, ENABLE);               //使能发送缓冲空中断

  17. USART_ITConfig(USART1, USART_IT_TC, ENABLE);                 //使能发送完成中断
复制代码

6、  使能外设功能:

串口使能:

  1. USART_Cmd(USARTx, ENABLE);

  2. ADC使能:

  3. ADC_Cmd(ADC1, ENABLE);
复制代码


收藏 评论0 发布时间:2021-12-4 17:03

举报

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