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

stm32f407 GPIO、TIM、ADC、DAC、ETH、SPI、CAN、US(A)RT、DMA、看门...

[复制链接]
STMCU小助手 发布时间:2021-1-4 16:37
stm32f407 GPIO、TIM、ADC、DAC、ETH、SPI、CAN、US(A)RT、DMA、看门狗等配置函数总结
整理了一下STM32F407单片机各个功能模块的配置函数,有时候初始化的时候会忘记该初始化哪些内容,整理一下以备以后查阅。
GPIO配置需要用到的函数:
  1. RCC_AHB1PeriphClockCmd        //时钟配置" Q' y3 u& ~! n' F. [9 ^8 p. K
  2. GPIO_Init                      //端口初始化
    1 d3 }8 q0 ^; d
  3. GPIO_PinAFConfig              //引脚重映射
复制代码
; h9 Q- d3 X* I7 \) p
ADC配置需要用到的函数:
  1. GPIO配置相关函数+ a8 ^! b1 d0 P0 z0 J
  2. RCC_APB2PeriphClockCmd        //时钟配置
    , {" g3 ?6 p2 q, Y" l0 K& `) C' u
  3. ADC_CommonInit                //ADC公共配置
    2 v. `& H0 _6 q4 ?( P
  4. ADC_Init                        //ADC初始化
    4 [% q9 ^1 }# @& Q. a! W
  5. ADC_RegularChannelConfig      //ADC通道配置
    . e# }$ {& d/ t3 E  B' B# K2 n
  6. ADC_SoftwareStartConv          //ADC转换启动( a" _- g; T9 y  f
  7. ADC_Cmd                      //ADC使能/ x' L& W/ H8 A4 C( c6 k" Q& F! [
  8. //如果使用DMA传输数据,需要添加以下两个函数
    % Q1 l% o2 W# o
  9. ADC_DMARequestAfterLastTransferCmd    //使能ADC的DMA功能
    ! j$ ]) m- s, F3 G9 ~/ |
  10. ADC_DMACmd                          //使能DMA
复制代码
8 \' s* E1 j- [7 D
DMA配置需要用到的函数:
  1. RCC_AHB1PeriphClockCmd        //时钟配置. V3 w2 P' n* a$ U8 y; K1 v
  2. DMA_Init                      //DMA初始化
    3 p$ X5 A4 s1 X( a
  3. DMA_ClearFlag                  //清除DMA相关标志位9 K9 i' K( G4 e* w
  4. DMA_ITConfig                  //DMA中断配置2 R7 y) ?, P. C' r6 \+ e9 w
  5. DMA_Cmd                      //使能DMA通道
复制代码

, }( C( W1 I$ |
CAN配置需要用到的函数:
  1. GPIO相关函数
    . n! T9 i% b( p6 r7 K
  2. RCC_APB1PeriphClockCmd        //时钟配置
    5 L2 j8 m9 _  d) v
  3. GPIO_PinAFConfig              //引脚复用: q: G) b9 N4 q$ _- j" q& O
  4. CAN_Init                        //CAN初始化5 n" u3 n' I3 v
  5. CAN_FilterInit                  //CAN滤波器设置(can2滤波器从14开始)  J& W, j  Q( j  s* P- R+ {8 F; `
  6. CAN_ITConfig                  //CAN中断配置9 a, B: Y; N; I7 Z% Z- j
  7. CAN_ClearITPendingBit          //清除CAN中断等待信号
      d2 L- \  V8 ~# @, {# P. c
  8. CAN_Transmit                  //CAN发送数据函数(发送数据前需要配置数据帧CanTxMsg)
    ) }" V' e6 l+ U3 T/ z3 c  e
  9. CAN_Receive                    //CAN接收数据函数,一般在中断中调用
复制代码
  e( o4 P% u/ R3 U
US(A)RT串口通讯需要配置的函数:
  1. GPIO相关函数, V( r1 N* M2 K1 `4 @# h5 a" S: h
  2. RCC_APB2PeriphClockCmd        //USART1和6的时钟配置
    6 L" B8 Y0 v) o5 g& }
  3. RCC_APB1PeriphClockCmd        //外其它USART的时钟配置% T3 V7 R* G9 n/ R; H9 T" Y
  4. USART_Init                      //串口初始化. F! X6 j& d" B' p  o; l
  5. USART_ClearFlag                //清除标志位, c6 Y& J7 u5 p5 U$ Z: k9 L5 x
  6. USART_ITConfig                //串口中断配置/ @( l1 f4 I- Z2 n+ v+ L3 V; Q
  7. USART_Cmd                    //使能串口
    0 o1 x8 f% m5 H2 b
  8. USART_GetFlagStatus            //串口标志位查询
    + B! a$ {; k: {' X. M: ?
  9. USART_SendData                //串口发送数据(调用数据发送时需要先调用USART_GetFlagStatus判断USART_FLAG_TC)
    1 @8 B# m: `8 y1 k
  10. USART_ReceiveData              //串口接收数据,一般在中断
复制代码

: S7 s! R" f( k4 s4 M" J
systick需要配置的函数:
  1. SysTick_CLKSourceConfig        //配置系统嘀嗒的时钟
    ( u6 y. V6 l) R
  2. SysTick_Config                  //配置定时时间
复制代码

3 [$ W, h! \8 K: a' I  ]1 E5 h( S
DAC功能需要配置的函数:
  1. GPIO相关函数! |/ R' L) q% v$ X( g" Q
  2. RCC_APB1PeriphClockCmd        //时钟配置
    - S3 g9 j: v  T8 ~$ L* Q0 |4 b9 h2 @
  3. DAC_Init                        //DAC初始化, _" r: J8 H1 K/ o7 @  @9 ]9 H( R, r6 H
  4. DAC_Cmd                      //使能DAC通道
    ! G( ^* o: j, r* w0 @' y$ v/ f- `
  5. DAC_SetChannel1Data            ) J3 j3 a3 E6 `* d
  6. DAC_SetChannel2Data
    4 q3 l, Z- u9 m8 F& A
  7. DAC_SetDualChannelData        //通道写数据
复制代码

! M/ m8 F& @/ u
TIM功能需要配置的函数:
  1. GPIO相关函数                  //有输入输出时配置,单纯的定时器不需要GPIO配置
    / u7 y- \  c2 F
  2. RCC_APB1PeriphClockCmd        //时钟配置,根据定时器不同选择不同的时钟配置, [4 }/ O% m1 l8 \. W7 n
  3. TIM_TimeBaseInit                //定时器初始化6 K$ g- ~  [+ O2 ^0 ?. ^' E3 Z" ~
  4. TIM_ARRPreloadConfig          //使能重装载; Y" w0 S& e: f7 m3 p: @+ c) d: K  j
  5. TIM_ClearFlag                  //清除标志位" T. V  i/ o* i# R- Y
  6. TIM_ITConfig                  //中断配置  f$ }) f4 D1 A7 J- q1 o
  7. TIM_DMACmd                  //使能DMA功能(根据需要选择)
    , n3 b+ {( t4 B0 S/ q: L/ E! G
  8. TIM_Cmd                      //定时器使能
    # Z- h, ]6 p  A1 \& O0 ]- @
  9. TIM_TIxExternalClockConfig      //计数器模式需要配置的函数
      M# {$ i% _2 u+ Q
  10. TIM_ICInit                      //输入捕获初始化,计数器模式,频率输入模式需要配置
    3 Q5 d! u1 l5 ~3 W% f
  11. TIM_OCxInit                    //输出比较初始化,PWM输出,
    # f4 p5 R1 \$ ?. ^; f& D( m
  12. TIM_CtrlPWMOutputs            //PWM输出使能,定时器1和8特
复制代码

- i, }* q' t5 {; _; E$ i, U# R# S
FSMC功能需要配置的函数:
  1. GPIO相关函数
    . [6 B/ i& r" R
  2. RCC_AHB3PeriphClockCmd        //时钟配置$ z6 j& L. J+ u( a8 V& P
  3. FSMC_NORSRAMInit              //NORFlash配置函数( K1 s- u$ s. y' {/ [) H3 Q2 m
  4. FSMC_NANDInit                //NANDFlash配置函数
    5 B* L+ b/ o/ \2 j3 n; D3 q
  5. FSMC_NORSRAMCmd            //使能FSMC' v4 M2 s, g) ^4 S( Y
  6. FSMC_NANDCmd                //使能FSMC
复制代码
9 x+ ]8 p" V3 J7 J9 t7 q& c
SPI功能需要配置的函数:
  1. GPIO相关函数
    * n6 n; H7 Q* m  q+ u  @
  2. RCC_APB2PeriphClockCmd        //时钟配置, s7 ^& x+ v* O7 ?; r/ ?
  3. SPI_Init                        //SPI功能初始化$ E5 }+ O/ o# }1 X8 _
  4. SPI_Cmd                        //使能SPI功能+ N4 G& N9 [- v8 g5 d- t0 m1 Y: T
  5. SPI_I2S_GetFlagStatus            //查询SPI收发状态
    3 Z" ^3 ~$ _% R! x+ o: O
  6. SPI_I2S_SendData                //发送数据
    5 L1 ~2 k% I) Q. h3 f8 T6 |/ m, }# k
  7. SPI_I2S_ReceiveData            //接收数据
复制代码
; [) J1 P0 `2 }& i% F
外部中断需要配置的函数:
  1. , ^7 B/ K. E' y8 ^6 ~1 L0 Q
  2. GPIO相关函数
    9 K/ O: f4 ^  N" M4 ~& f
  3. RCC_APB2PeriphClockCmd        //时钟配置,RCC_APB2Periph_SYSCFG# s, C4 z2 J! y8 _0 P& }  e
  4. SYSCFG_EXTILineConfig          //中断源配置# p/ f" X4 s0 P% h+ X/ U: M; U! V7 S
  5. EXTI_ClearITPendingBit          //清除中断标志位
    4 a. Z) h! ^# b6 X2 Q2 c
  6. EXTI_Init                      //初始化外部中断& k: s7 u  j6 u+ m4 @8 D0 P2 u+ ]  D
  7. NVIC_Init                      //中断配置
复制代码
独立看门狗需要配置的函数:
  1. IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);    //写入0x5555,用于允许狗狗寄存器写入功能+ [+ ?6 G' S7 ?
  2. IWDG_SetPrescaler(IWDG_Prescaler_256);             //狗狗时钟分频,40K/256=156HZ(6.4ms)
    : W" r0 r) x. Q# n
  3. IWDG_SetReload(315);                             //喂狗时间2s/6.4MS=313  .注意不能大于0xfff,计数器数值! e  t* }& y) t6 E' m9 K( G
  4. IWDG_ReloadCounter();                             //喂狗函数,重启计数器  
    0 ^# z5 G0 d. I
  5. IWDG_Enable();   
复制代码

6 L5 x0 c4 {: C
窗口看门狗需要配置的函数:
  1. /* WWDG 配置函数3 }) O* l! `% z8 e! ]& g% P6 h
  2. * tr :递减计时器的值, 取值范围为:0x7f~0x40,超出范围会直接复位
    + O# [) C; Q  p2 a% j& W
  3. * wr :窗口值,取值范围为:0x7f~0x40
    & a; I4 U2 e3 r% F: P- s
  4. * prv:预分频器值,取值可以是8 D" p8 P$ {$ ]% y( `
  5.    *      @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1(42MHz)/4096)/1  约10253Hz 97us
    6 V9 l) @; f$ Z/ n
  6.    *      @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1(42MHz)/4096)/2   约5126Hz  195us, L  m$ ]9 h7 G2 T  h
  7.    *      @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1(42MHz)/4096)/4   约2563Hz  390us
    . x3 f9 B+ j. t# w; w# N8 g% m
  8.    *      @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1(42MHz)/4096)/8  约1281Hz  780us8 t5 n$ c( d: i
  9.    *      6 X6 I, x2 K) a0 X
  10.    *      例:tr = 127(0x7f,tr的最大值)  wr = 80(0x50, 0x40为最小wr最小值)  prv =  WWDG_Prescaler_8; `# _2 ~0 y; ?( g" Y$ p
  11.    *      ~780 * (127-80) = 36.6ms < 刷新窗口 < ~780 * 64 = 49.9ms% W; Q* }- l: l8 O8 I6 X
  12.    *      也就是说调用WWDG_Config进行这样的配置,若在之后的36.6ms前喂狗,系统会复位,在49.9ms后没有喂狗,系统也会复位。5 u  A3 b+ p% g: l3 D8 _2 L6 _% t
  13.    *      需要在刷新窗口的时间内喂狗,系统才不会复位。
    ) Y- K" r7 ^6 A6 g3 O0 D0 F
  14. */3 D  [# {/ h5 f; }
  15. RCC_APB1PeriphClockCmd        //时钟配置
    6 n7 l* W0 [1 C7 V! W& J
  16. WWDG_SetPrescaler( prv );        //预分频器配置  ~) z+ l# p" y1 b* {" s
  17. WWDG_SetWindowValue( wr );    //设置上窗口值9 j$ t6 z7 ]- k: g4 ?) X
  18. WWDG_Enable(tr);              //使能看门狗/ F: y" b$ w, L7 e+ E0 O
  19. WWDG_ClearFlag();              //清看门狗标志( F4 w, G" s+ H/ ~: v
  20. WWDG_EnableIT();              //使能看门狗中断  E" }2 Z5 b; o4 g8 B
  21. WWDG_SetCounter( tr );          //喂狗函数
复制代码
, Z$ E! o# p0 x* m
Ethernet需要配置的函数:
  1. GPIO相关函数
      F6 s% Z9 y  F: O8 N* \
  2. RCC_AHB1PeriphClockCmd        //时钟配置0 s5 r* o9 O9 M) B
  3. ETH_SoftwareReset              //软件复位5 K* }0 n( |; k, q" ^( ~# A7 O
  4. ETH_GetSoftwareResetStatus      //获取复位状态
    ( K- H; v3 U% w8 w
  5. ETH_Init                        //初始化
    6 r& m- }2 K7 u
  6. ETH_DMAITConfig              //DMA中断配置8 n9 t* \1 u( q
  7. SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII);//定义RMII接口
复制代码

# n2 X- m: h! @5 ?9 J" y9 d
可能不是特别的全面,但是大部分功能应该都包含了,根据这些函数去初始化各个模块,就可以实现相应的功能。这里记录的只是各个模块初始化用到的函数,没有细节,细节部分之前有整理,后续还会根据需要随时记录一些函数配置。
记录整理一下,不知道哪天不小心又把记事本给删了。
文章出处: 单片机学习点滴
7 f; _3 C/ c6 w2 O
收藏 4 评论3 发布时间:2021-1-4 16:37

举报

3个回答
kylixyao 回答时间:2021-1-4 19:19:05
快速开发中,HAL+LL库是主流
fpy135228 回答时间:2021-1-5 10:03:35
收藏学习下
apollolu 回答时间:2021-1-8 06:59:00
赞一个,不扣金币

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版