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

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 D- I  b3 G3 h* g0 _" `
  2. GPIO_Init                      //端口初始化6 L, S) a* o2 H6 Y0 }+ n# P
  3. GPIO_PinAFConfig              //引脚重映射
复制代码

0 V+ b% ]/ P0 |/ C' S
ADC配置需要用到的函数:
  1. GPIO配置相关函数
    6 B) c. W' o. w7 \( u$ Y" c
  2. RCC_APB2PeriphClockCmd        //时钟配置' Y9 R6 [. u+ O8 T& P, A/ ~
  3. ADC_CommonInit                //ADC公共配置
    - q/ @( W+ j) w4 u6 `2 }
  4. ADC_Init                        //ADC初始化' {* e4 `( u4 {2 L  A) B5 ?
  5. ADC_RegularChannelConfig      //ADC通道配置- G, c# a3 g6 ]- O/ y
  6. ADC_SoftwareStartConv          //ADC转换启动8 S7 n: j" }% j: O$ K
  7. ADC_Cmd                      //ADC使能/ V3 ^) A, v* _. ~2 r# m
  8. //如果使用DMA传输数据,需要添加以下两个函数- H* C  \1 c; s0 P5 S
  9. ADC_DMARequestAfterLastTransferCmd    //使能ADC的DMA功能9 o2 A/ L' B+ L
  10. ADC_DMACmd                          //使能DMA
复制代码
6 u# R0 o& x, u+ h- c  c
DMA配置需要用到的函数:
  1. RCC_AHB1PeriphClockCmd        //时钟配置
    - W7 {7 {: R1 D! o
  2. DMA_Init                      //DMA初始化
    & k- z8 l8 B$ |. }# G
  3. DMA_ClearFlag                  //清除DMA相关标志位: L+ S* n+ a- K$ x4 T. Y' k
  4. DMA_ITConfig                  //DMA中断配置9 X& G# O$ G% |. `1 d/ Y
  5. DMA_Cmd                      //使能DMA通道
复制代码
0 j  k2 d  u5 E' x
CAN配置需要用到的函数:
  1. GPIO相关函数
    6 d3 z$ t! \, m* ?" x
  2. RCC_APB1PeriphClockCmd        //时钟配置3 C9 f9 O3 `9 x' `7 U. Y
  3. GPIO_PinAFConfig              //引脚复用
    + j' K. z- x2 e- @
  4. CAN_Init                        //CAN初始化; f# u6 r0 g% d! m/ Q; ~
  5. CAN_FilterInit                  //CAN滤波器设置(can2滤波器从14开始)& N, V, h6 |  J
  6. CAN_ITConfig                  //CAN中断配置
    2 ~. y5 l5 U% H$ t. Q' d! C" w" q$ N
  7. CAN_ClearITPendingBit          //清除CAN中断等待信号2 b1 P$ L4 _6 |# Z9 B# D1 P: n; o+ K
  8. CAN_Transmit                  //CAN发送数据函数(发送数据前需要配置数据帧CanTxMsg)
    * J# M0 M8 L6 U; P" l
  9. CAN_Receive                    //CAN接收数据函数,一般在中断中调用
复制代码

) C$ l: h4 H1 F% m* X, {) {
US(A)RT串口通讯需要配置的函数:
  1. GPIO相关函数! v0 ?+ n# n* D5 P- X! Z1 V
  2. RCC_APB2PeriphClockCmd        //USART1和6的时钟配置3 r- Z% o8 t( G
  3. RCC_APB1PeriphClockCmd        //外其它USART的时钟配置
    ! C9 y) d' j! y% d4 Q4 ]
  4. USART_Init                      //串口初始化1 L- F$ A9 _! F
  5. USART_ClearFlag                //清除标志位
    3 v6 s9 r. p3 C. [0 b2 s+ z% a3 O
  6. USART_ITConfig                //串口中断配置
    5 `- O# e* R- }- |$ F* T
  7. USART_Cmd                    //使能串口
    ; D* s, L1 p" {: c# B0 j# z
  8. USART_GetFlagStatus            //串口标志位查询" Z- V4 k% p* b6 v; B
  9. USART_SendData                //串口发送数据(调用数据发送时需要先调用USART_GetFlagStatus判断USART_FLAG_TC)
    6 L4 K( }0 h; D  N$ v+ T( ~5 Z
  10. USART_ReceiveData              //串口接收数据,一般在中断
复制代码
! k; C" N, Z8 @$ c- U
systick需要配置的函数:
  1. SysTick_CLKSourceConfig        //配置系统嘀嗒的时钟
    + D+ a4 k  L6 t9 J+ W
  2. SysTick_Config                  //配置定时时间
复制代码

0 R" b4 a* R7 m9 e
DAC功能需要配置的函数:
  1. GPIO相关函数
    5 Y) w1 l) ]/ Y+ B2 w( {9 F/ ]
  2. RCC_APB1PeriphClockCmd        //时钟配置
    2 A( j, O% i* A" L  T% A- \1 v
  3. DAC_Init                        //DAC初始化
    / s$ j) e, h: k
  4. DAC_Cmd                      //使能DAC通道
    5 ?! ^" ]+ q+ f8 L/ p
  5. DAC_SetChannel1Data            / O, Z4 O3 I) c- F. q( R5 H/ y
  6. DAC_SetChannel2Data
      W2 `- V1 Q% w2 h, i7 z* w! q, B  J
  7. DAC_SetDualChannelData        //通道写数据
复制代码

1 ?3 q5 x7 N+ |
TIM功能需要配置的函数:
  1. GPIO相关函数                  //有输入输出时配置,单纯的定时器不需要GPIO配置
    0 a) n5 R# \% Z; d5 b! ?1 _
  2. RCC_APB1PeriphClockCmd        //时钟配置,根据定时器不同选择不同的时钟配置5 e, a/ L6 r- `
  3. TIM_TimeBaseInit                //定时器初始化
    ! S* I2 K0 C+ \  e# [6 W$ r) w6 |
  4. TIM_ARRPreloadConfig          //使能重装载% S/ o! d- L; u8 i3 I
  5. TIM_ClearFlag                  //清除标志位8 G, e3 H9 D0 {, [( Y
  6. TIM_ITConfig                  //中断配置
    + [5 R% ?5 r5 i3 [3 k! P
  7. TIM_DMACmd                  //使能DMA功能(根据需要选择)
      R* \; e, L$ @" \4 o
  8. TIM_Cmd                      //定时器使能# w$ y2 E. |0 a1 J1 E$ {& B
  9. TIM_TIxExternalClockConfig      //计数器模式需要配置的函数
    8 y" Y; H% Y  m
  10. TIM_ICInit                      //输入捕获初始化,计数器模式,频率输入模式需要配置
    ( P- o& n% S& Y7 m
  11. TIM_OCxInit                    //输出比较初始化,PWM输出,4 b+ c& B2 j: a; y8 M, g  a
  12. TIM_CtrlPWMOutputs            //PWM输出使能,定时器1和8特
复制代码
' X9 q. f# B& [: T7 F
FSMC功能需要配置的函数:
  1. GPIO相关函数1 Z6 T1 ?  k4 w) k. ?+ n
  2. RCC_AHB3PeriphClockCmd        //时钟配置
    1 \: ?3 L5 p, X; x; C3 c, ~: U
  3. FSMC_NORSRAMInit              //NORFlash配置函数
    $ T) s' H8 |2 Z7 R, l1 ~; x, p
  4. FSMC_NANDInit                //NANDFlash配置函数- n( i% C$ O- S+ T* ~& ]1 q* ]0 b
  5. FSMC_NORSRAMCmd            //使能FSMC
    0 I7 D! A" e2 l% b: n" s
  6. FSMC_NANDCmd                //使能FSMC
复制代码

9 m! a* p& u9 c) M) U1 B6 ^
SPI功能需要配置的函数:
  1. GPIO相关函数
    3 s5 L; z, ^. `' L( p
  2. RCC_APB2PeriphClockCmd        //时钟配置1 b3 h3 t4 ?3 H/ u' m2 `! Y
  3. SPI_Init                        //SPI功能初始化3 [; ~) W2 K+ X/ H" J5 y+ ]
  4. SPI_Cmd                        //使能SPI功能0 N. }$ b# R1 }- p
  5. SPI_I2S_GetFlagStatus            //查询SPI收发状态$ U# s5 F4 _4 b( S
  6. SPI_I2S_SendData                //发送数据* p7 z, Y# M0 w' ^: e, w2 [) \9 `
  7. SPI_I2S_ReceiveData            //接收数据
复制代码

* z7 i  Y$ z( [. S* B% H% d
外部中断需要配置的函数:

  1. ! y7 s/ q8 t1 ]. t" k, c5 l
  2. GPIO相关函数
    5 }* M, y0 J6 R/ j1 n
  3. RCC_APB2PeriphClockCmd        //时钟配置,RCC_APB2Periph_SYSCFG7 o2 k1 T) q; d+ l) T7 J5 s; y
  4. SYSCFG_EXTILineConfig          //中断源配置
    0 X- \) P4 E' k/ a6 e" B
  5. EXTI_ClearITPendingBit          //清除中断标志位2 j, R8 }4 A( ~
  6. EXTI_Init                      //初始化外部中断
    7 l5 Q, U! y' J* \2 Q( @
  7. NVIC_Init                      //中断配置
复制代码
独立看门狗需要配置的函数:
  1. IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);    //写入0x5555,用于允许狗狗寄存器写入功能
    : o2 \- o8 \  l0 g5 E
  2. IWDG_SetPrescaler(IWDG_Prescaler_256);             //狗狗时钟分频,40K/256=156HZ(6.4ms)8 f$ D( N4 r! H, U
  3. IWDG_SetReload(315);                             //喂狗时间2s/6.4MS=313  .注意不能大于0xfff,计数器数值
    % d' ~$ z( }& o# C
  4. IWDG_ReloadCounter();                             //喂狗函数,重启计数器  
    ) V, H6 c3 i! l, I( e1 ~  W
  5. IWDG_Enable();   
复制代码

9 e: n; _2 x$ ~( g
窗口看门狗需要配置的函数:
  1. /* WWDG 配置函数
    ; L$ D+ ^! M, U" p% k7 x: Y  _
  2. * tr :递减计时器的值, 取值范围为:0x7f~0x40,超出范围会直接复位
    / n5 v4 Q# @5 X6 A
  3. * wr :窗口值,取值范围为:0x7f~0x40
    9 q$ g. V! T, {
  4. * prv:预分频器值,取值可以是
    7 o: d" j$ n1 Y$ Q! k$ I; o
  5.    *      @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1(42MHz)/4096)/1  约10253Hz 97us
    1 r7 P" X* `( q: E1 o7 Z6 i7 ]
  6.    *      @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1(42MHz)/4096)/2   约5126Hz  195us
    ( C; y! Q  c6 r- |3 a, w3 d2 ~3 j: x
  7.    *      @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1(42MHz)/4096)/4   约2563Hz  390us/ l9 ]/ p; d- A' [0 `
  8.    *      @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1(42MHz)/4096)/8  约1281Hz  780us, `" V5 n* L* A3 Q/ f  B
  9.    *      
    * _5 U( O( z. e& O$ W; v* ^
  10.    *      例:tr = 127(0x7f,tr的最大值)  wr = 80(0x50, 0x40为最小wr最小值)  prv =  WWDG_Prescaler_8* X, \1 z* k6 F2 y% k
  11.    *      ~780 * (127-80) = 36.6ms < 刷新窗口 < ~780 * 64 = 49.9ms
      q/ V9 [0 U% ?" D
  12.    *      也就是说调用WWDG_Config进行这样的配置,若在之后的36.6ms前喂狗,系统会复位,在49.9ms后没有喂狗,系统也会复位。/ D$ |1 R5 ^' f) p; L
  13.    *      需要在刷新窗口的时间内喂狗,系统才不会复位。7 P+ h: T; X0 G# {  w+ ^2 b( f7 I
  14. */8 q( c) }' }0 V! o* X) |
  15. RCC_APB1PeriphClockCmd        //时钟配置# i( q4 k7 G: @7 }: U! ?% W% x4 G# w
  16. WWDG_SetPrescaler( prv );        //预分频器配置
    7 v& l  i2 w  R( l
  17. WWDG_SetWindowValue( wr );    //设置上窗口值
    & A( S) t4 n4 e% m! f
  18. WWDG_Enable(tr);              //使能看门狗
    ( A, u9 N7 ^, X5 b- c/ N
  19. WWDG_ClearFlag();              //清看门狗标志
    ( |0 m& C" k# ^; q- a# P
  20. WWDG_EnableIT();              //使能看门狗中断4 T# J% Q) a; w& o: p6 R
  21. WWDG_SetCounter( tr );          //喂狗函数
复制代码
1 e2 A/ b. t& e' L* J
Ethernet需要配置的函数:
  1. GPIO相关函数
      S* F5 o( P8 W7 H7 _0 B: t! x
  2. RCC_AHB1PeriphClockCmd        //时钟配置
    " v/ ?+ S3 S$ Y* B+ c! i5 i
  3. ETH_SoftwareReset              //软件复位
    ( U$ f9 ?/ v% |  |) ]
  4. ETH_GetSoftwareResetStatus      //获取复位状态% X; l, t- v( V+ S, h! g
  5. ETH_Init                        //初始化
    0 Q# H) k; H' ^3 P
  6. ETH_DMAITConfig              //DMA中断配置$ T" ]( F1 r& ^5 X
  7. SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII);//定义RMII接口
复制代码
9 l9 Q% d5 |- A0 S- p# o
可能不是特别的全面,但是大部分功能应该都包含了,根据这些函数去初始化各个模块,就可以实现相应的功能。这里记录的只是各个模块初始化用到的函数,没有细节,细节部分之前有整理,后续还会根据需要随时记录一些函数配置。
记录整理一下,不知道哪天不小心又把记事本给删了。
文章出处: 单片机学习点滴

* d2 C" F7 C4 C! P
赞 收藏 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 手机版