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

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        //时钟配置
    6 a( a/ M: s! i/ w
  2. GPIO_Init                      //端口初始化8 ^2 e$ L* g7 F& J  O0 [3 X$ P
  3. GPIO_PinAFConfig              //引脚重映射
复制代码

( h3 {9 L% \: g" Q
ADC配置需要用到的函数:
  1. GPIO配置相关函数
    $ G) X- \4 y6 v) M" P, Y; ]0 h# Z
  2. RCC_APB2PeriphClockCmd        //时钟配置
    ( V+ ]( R/ D  Y. U! i8 ~0 _
  3. ADC_CommonInit                //ADC公共配置
    0 ?  s* `- T) Q; q
  4. ADC_Init                        //ADC初始化8 e: p8 k% y# Y2 J) U. i: Z4 r
  5. ADC_RegularChannelConfig      //ADC通道配置2 H4 B) r! }$ n6 E: |3 S
  6. ADC_SoftwareStartConv          //ADC转换启动
    & x( X8 |; Y8 ]2 h, r+ q9 t
  7. ADC_Cmd                      //ADC使能
    0 |% `0 `8 S2 m- |. U( a4 S! ~2 S
  8. //如果使用DMA传输数据,需要添加以下两个函数% F6 P: Q$ [% ]1 j: M$ q5 I/ N
  9. ADC_DMARequestAfterLastTransferCmd    //使能ADC的DMA功能
    + o9 [5 V! v' C9 ~- H
  10. ADC_DMACmd                          //使能DMA
复制代码

2 ]4 Y) e' s( V' Q
DMA配置需要用到的函数:
  1. RCC_AHB1PeriphClockCmd        //时钟配置: L8 H$ ^2 D4 Z4 H: A+ [$ R
  2. DMA_Init                      //DMA初始化( }# M  W. F, h% I4 L
  3. DMA_ClearFlag                  //清除DMA相关标志位
    . f! k& L3 M+ _& V; h7 T
  4. DMA_ITConfig                  //DMA中断配置
    1 m2 B$ ?5 y0 O) j
  5. DMA_Cmd                      //使能DMA通道
复制代码

1 n0 b5 L+ f5 a: [
CAN配置需要用到的函数:
  1. GPIO相关函数, Z! g2 J# n: x
  2. RCC_APB1PeriphClockCmd        //时钟配置
    " S6 t' a# h* Q
  3. GPIO_PinAFConfig              //引脚复用
    : b9 e, n$ t  x; ~7 E# o8 s8 P6 J
  4. CAN_Init                        //CAN初始化
    ' R5 `2 N/ n1 K: Z
  5. CAN_FilterInit                  //CAN滤波器设置(can2滤波器从14开始)% F4 y4 o% {, Q0 B( ?
  6. CAN_ITConfig                  //CAN中断配置
    * d  X: j5 I/ e' J- J% S
  7. CAN_ClearITPendingBit          //清除CAN中断等待信号
    5 M6 ~: a9 a, B7 q' \$ R( p
  8. CAN_Transmit                  //CAN发送数据函数(发送数据前需要配置数据帧CanTxMsg)
    $ O3 f; n7 A; J* U2 J( s7 O; l
  9. CAN_Receive                    //CAN接收数据函数,一般在中断中调用
复制代码
# N7 w0 I, B; f/ M1 k8 v! ?0 C
US(A)RT串口通讯需要配置的函数:
  1. GPIO相关函数+ h9 f6 A- m% X, f* m  f# ^
  2. RCC_APB2PeriphClockCmd        //USART1和6的时钟配置
    & ]; s$ Q. p+ J( |( J
  3. RCC_APB1PeriphClockCmd        //外其它USART的时钟配置, f! w* t5 F/ ~
  4. USART_Init                      //串口初始化
      r2 g0 W/ q6 E
  5. USART_ClearFlag                //清除标志位
    5 Q4 E+ j. ^2 g1 S4 y# F
  6. USART_ITConfig                //串口中断配置
    . _1 B/ F1 x- k' x& N, [7 @* ?- g
  7. USART_Cmd                    //使能串口- Z, w5 u. n0 f! T& K5 z4 G4 ^% T# S
  8. USART_GetFlagStatus            //串口标志位查询" m  ~  J+ h9 `( e
  9. USART_SendData                //串口发送数据(调用数据发送时需要先调用USART_GetFlagStatus判断USART_FLAG_TC)
    . I% a3 m/ y* I3 B7 Y
  10. USART_ReceiveData              //串口接收数据,一般在中断
复制代码
7 b+ n8 E2 k7 ~) _: Y
systick需要配置的函数:
  1. SysTick_CLKSourceConfig        //配置系统嘀嗒的时钟
    9 Z7 \; J" n) |$ E# S" _8 d& X' D
  2. SysTick_Config                  //配置定时时间
复制代码
: ~7 L) I8 O" v% G: ?9 y6 x
DAC功能需要配置的函数:
  1. GPIO相关函数; I0 A6 H  C; ?' {" F
  2. RCC_APB1PeriphClockCmd        //时钟配置
    ) f1 ]( C3 @, I/ i
  3. DAC_Init                        //DAC初始化: d( F5 N& g' R8 |5 D
  4. DAC_Cmd                      //使能DAC通道
    8 C/ d' \# [5 w# X
  5. DAC_SetChannel1Data            0 {2 ?* I/ p% g5 F8 i) Z! K/ w
  6. DAC_SetChannel2Data4 u, O' Z  t4 H  Z0 E9 Q4 a
  7. DAC_SetDualChannelData        //通道写数据
复制代码

( z% Q* Q6 [+ E$ v% B  Z' c
TIM功能需要配置的函数:
  1. GPIO相关函数                  //有输入输出时配置,单纯的定时器不需要GPIO配置) j- Y7 W4 ~8 m7 j4 j0 n( G
  2. RCC_APB1PeriphClockCmd        //时钟配置,根据定时器不同选择不同的时钟配置. S& c/ k1 L7 A& U
  3. TIM_TimeBaseInit                //定时器初始化
    $ Z" o& v) C# N) U2 F/ ?6 J
  4. TIM_ARRPreloadConfig          //使能重装载
    # C9 G, g; I8 A  T- _5 i6 o
  5. TIM_ClearFlag                  //清除标志位
    1 k7 N) l& q2 f5 F$ C
  6. TIM_ITConfig                  //中断配置. {1 d" N; }+ [( U4 m
  7. TIM_DMACmd                  //使能DMA功能(根据需要选择)
    ' G, \. L0 [. k0 _& b4 e
  8. TIM_Cmd                      //定时器使能$ f" U3 C) W% a# Y& l; ?
  9. TIM_TIxExternalClockConfig      //计数器模式需要配置的函数% j' i- E- }7 b# a9 F' D
  10. TIM_ICInit                      //输入捕获初始化,计数器模式,频率输入模式需要配置7 X) h1 v! F7 V. E1 V
  11. TIM_OCxInit                    //输出比较初始化,PWM输出,
    6 C1 S; A2 b' \2 g
  12. TIM_CtrlPWMOutputs            //PWM输出使能,定时器1和8特
复制代码
$ L3 W7 f- Q1 T( u
FSMC功能需要配置的函数:
  1. GPIO相关函数
    * K7 [* P4 f* Q5 b7 w7 B( D
  2. RCC_AHB3PeriphClockCmd        //时钟配置: E+ Y% [; q" ]( W4 `+ n
  3. FSMC_NORSRAMInit              //NORFlash配置函数) F/ L) |2 i1 K" g; a  u0 C
  4. FSMC_NANDInit                //NANDFlash配置函数/ g& _2 C) t! c8 g7 {
  5. FSMC_NORSRAMCmd            //使能FSMC) g6 F. e2 r6 @. S
  6. FSMC_NANDCmd                //使能FSMC
复制代码

, T3 d% G) `+ u" X* j
SPI功能需要配置的函数:
  1. GPIO相关函数; d& F5 D) \) Z+ q; B8 N1 _
  2. RCC_APB2PeriphClockCmd        //时钟配置
    + r% K) \, R& @: M' c( M
  3. SPI_Init                        //SPI功能初始化
    3 l0 o" a+ \) q4 X
  4. SPI_Cmd                        //使能SPI功能% F2 t/ I+ A9 c4 _3 B( u
  5. SPI_I2S_GetFlagStatus            //查询SPI收发状态
    1 u1 P1 W- I% H  @! n2 ?7 l
  6. SPI_I2S_SendData                //发送数据
    ; X  B# o' o1 V  o* [( Y5 T
  7. SPI_I2S_ReceiveData            //接收数据
复制代码
3 J( h0 C) b& ]! ^& F
外部中断需要配置的函数:
  1. % K: C3 ?. H: b4 r
  2. GPIO相关函数
    " o7 Y# J$ G9 z* Y+ Q' X! |
  3. RCC_APB2PeriphClockCmd        //时钟配置,RCC_APB2Periph_SYSCFG8 ^5 C9 t- j1 s5 N0 ^
  4. SYSCFG_EXTILineConfig          //中断源配置
    1 r, a: @! s" G) {) S) c
  5. EXTI_ClearITPendingBit          //清除中断标志位
    0 ^4 e! m9 x' g8 i0 P% {
  6. EXTI_Init                      //初始化外部中断
    . r: H6 g$ w. O( t
  7. NVIC_Init                      //中断配置
复制代码
独立看门狗需要配置的函数:
  1. IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);    //写入0x5555,用于允许狗狗寄存器写入功能; v: N5 K3 x7 c# h$ V4 @6 B, U
  2. IWDG_SetPrescaler(IWDG_Prescaler_256);             //狗狗时钟分频,40K/256=156HZ(6.4ms)
    # q; k( ~+ e& H  M0 D
  3. IWDG_SetReload(315);                             //喂狗时间2s/6.4MS=313  .注意不能大于0xfff,计数器数值
    % ~+ W7 M  O  x
  4. IWDG_ReloadCounter();                             //喂狗函数,重启计数器  
    $ C! N5 A9 ^( M
  5. IWDG_Enable();   
复制代码
! q" {$ o4 u3 c; y3 s8 p4 m
窗口看门狗需要配置的函数:
  1. /* WWDG 配置函数
    % k4 ^4 C  l# p4 b7 B5 q% M9 U
  2. * tr :递减计时器的值, 取值范围为:0x7f~0x40,超出范围会直接复位1 b2 h6 H4 x4 ~% |/ _
  3. * wr :窗口值,取值范围为:0x7f~0x40
    0 i) |* O% a8 r/ b- a
  4. * prv:预分频器值,取值可以是! p& `4 x1 G& K$ ]+ X
  5.    *      @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1(42MHz)/4096)/1  约10253Hz 97us$ L0 Q1 s; y8 R2 [) I
  6.    *      @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1(42MHz)/4096)/2   约5126Hz  195us
    3 S; a+ U- `% }& m
  7.    *      @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1(42MHz)/4096)/4   约2563Hz  390us
    " Q8 I8 m( m, Y1 b0 A4 d8 _) T+ T& h& J
  8.    *      @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1(42MHz)/4096)/8  约1281Hz  780us6 e  ^. g/ I: ?, k. M3 S( {+ j# M1 D
  9.    *      
    ' O! x9 s/ z/ v  D& s
  10.    *      例:tr = 127(0x7f,tr的最大值)  wr = 80(0x50, 0x40为最小wr最小值)  prv =  WWDG_Prescaler_8
    3 E1 u& r+ e% e" r
  11.    *      ~780 * (127-80) = 36.6ms < 刷新窗口 < ~780 * 64 = 49.9ms
    4 o/ P' l; e3 b3 |( r: w( z
  12.    *      也就是说调用WWDG_Config进行这样的配置,若在之后的36.6ms前喂狗,系统会复位,在49.9ms后没有喂狗,系统也会复位。
    6 l' X5 n7 ^) s$ w
  13.    *      需要在刷新窗口的时间内喂狗,系统才不会复位。
    1 C* N& g3 d6 |0 B" J
  14. */
    3 @( y! Z4 o: M! N
  15. RCC_APB1PeriphClockCmd        //时钟配置
    % d# x% \, c8 C" R: h
  16. WWDG_SetPrescaler( prv );        //预分频器配置1 q3 l% H3 R* z' ~5 ^
  17. WWDG_SetWindowValue( wr );    //设置上窗口值4 I- `# T" N' G8 @: F' I
  18. WWDG_Enable(tr);              //使能看门狗
    ) L( c  e+ H8 u* @2 G) U9 r# O
  19. WWDG_ClearFlag();              //清看门狗标志
    ( n9 c7 n$ W$ F
  20. WWDG_EnableIT();              //使能看门狗中断
    * f! G! I5 d0 Q) G
  21. WWDG_SetCounter( tr );          //喂狗函数
复制代码

4 y5 u2 B, g$ A+ v: ^  O; n
Ethernet需要配置的函数:
  1. GPIO相关函数, ?9 U* Q6 o3 g( r  u2 X- F7 B. |
  2. RCC_AHB1PeriphClockCmd        //时钟配置  b2 b! _  x; Z$ w7 r) z' u
  3. ETH_SoftwareReset              //软件复位
    9 i" |- g4 o* v6 V
  4. ETH_GetSoftwareResetStatus      //获取复位状态
    0 X  N' A' g# H0 z
  5. ETH_Init                        //初始化
    6 N# m3 _7 g6 W  S/ l, E& T
  6. ETH_DMAITConfig              //DMA中断配置, ^, k8 C( Y4 m$ n
  7. SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII);//定义RMII接口
复制代码

7 Z6 c; M! [6 G5 S! \& d$ K
可能不是特别的全面,但是大部分功能应该都包含了,根据这些函数去初始化各个模块,就可以实现相应的功能。这里记录的只是各个模块初始化用到的函数,没有细节,细节部分之前有整理,后续还会根据需要随时记录一些函数配置。
记录整理一下,不知道哪天不小心又把记事本给删了。
文章出处: 单片机学习点滴
% Q* ?; {% Q. y* ~1 N  A! I6 F2 P" b
赞 收藏 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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版