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

【HAL库每天一例】第068例: JTAG功能引脚做为普通IO使用

[复制链接]
haohao663 发布时间:2016-7-18 08:57
HAL库每天一例】系列例程从今天开始持续更新。。。。。# ]# r& o" l! a# g: X; v
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,* _% B( ]  h- l# h5 g- C1 E
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。8 H& _$ t- d3 \/ B
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。  q2 k: q3 W, J+ ~

" Q% j9 S8 _! z# S* p, N例程下载:$ d& n5 t2 F# P* H
资料包括程序、相关说明资料以及软件使用截图- M6 [" S6 }1 Z' c3 `) y; K
百度云链接:https://pan.baidu.com/s/1i574oPv
# B6 u" i3 s9 N2 v" J* Z) D密码:r3s3
! q" j9 N# f4 L) y/ f7 W) g- ^
(硬石YS-F1Pro开发板HAL库例程持续更新\2. 软件设计之高级裸机例程(HAL库版本)\YSF1_HAL-101. JTAG功能引脚做为普通IO使用
)9 E, ]$ ?- u0 ?8 D6 Q

" ^' s0 ~5 t; v1 |
/**0 ]& \0 }/ a) D
  ******************************************************************************% T8 d9 C& {/ \$ w9 G
  *                           硬石YS-F1Pro开发板例程功能说明
- ]3 ?8 G5 q8 ]8 `5 A  *
) h, w8 l5 B2 r0 h4 Y  ?8 E8 Y  *  例程名称: YSF1_HAL-101. JTAG功能引脚做为普通IO使用
( ^( T$ l3 l# T  I) b( {9 M  *   6 I8 j2 u! r1 {! p
  ******************************************************************************7 ?1 D& v( Z5 Z7 Z  x! E
  * 说明:! c4 Z( T! M) U- W1 f: B! S) K2 N
  * 本例程配套硬石stm32开发板YS-F1Pro使用。7 T& ^/ y- Z! P, b  C' F7 X6 \
  *
! n  q' g9 p9 _: {  * 淘宝:  z8 l7 w% l( P
  * 论坛:硬石电子社区
& Q2 D7 Q; B2 S6 V& A3 w8 P: k6 g  * 版权归硬石嵌入式开发团队所有,请勿商用。9 o/ i4 ]; u2 I1 |4 r( K
  ******************************************************************************
; I0 `5 y9 u( o3 m$ A- b  */4 K/ v5 G8 h, h9 G3 B' Y

' G" ]5 x) d# ]$ |$ b【1】例程简介
: {8 M8 B  p+ T0 w  使用stm32 HAL库函数实现LED流水灯效果。通过这个例程熟悉stm32 HAL库函数编程思想。
% }5 S( \. G* i1 A, p1 Q0 ]9 z5 G$ {3 i
  stm32拥有非常多的IO引脚,这些IO引脚可以用作最简单的控制电平控制,可以设置为输出高电( k% y$ D6 P6 B
平(数字量:1,对应3.3V)或者低电平(数字量:0,对应0V),也可以设置为输入模式,读取这个IO引
% c* u9 }0 x; {6 a+ y& r8 H& o脚的电平(比如用于按键状态读取)。  本例程我们调用HAL库函数方法来实现对IO引脚的输出高低) f" {9 l* Q" B! r7 N8 r
电平进行控制。  
+ ?5 D6 e9 s+ h4 R  
! R9 Q/ L6 v) e2 R【2】跳线帽情况
% w7 b) D3 a5 I" C******* 为保证例程正常运行,必须插入以下跳线帽 **********2 g% e& ?  H5 ^- [4 c
丝印编号     IO端口      目标功能引脚        出厂默认设置
3 M; n2 D  k& d% M4 [0 w0 ^! l" C, t9 _* V3 f) [; V" Y
  9 {: W" J/ `+ ~) R$ W! M# R
【3】操作及现象% b: |# [0 X* |8 t
  使用开发板配套的MINI USB线连接到开发板标示“调试串口”字样的MIMI USB接口为开发板供电。8 S$ ~/ O' G" ]/ [
下载完程序之后,使用万用板测量PA15、PB3和PB4引脚电平可以观察到电压连续变化。9 J/ Z: A: m' N0 N
9 g7 n. `$ ^7 D
/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/. j( D4 C" [6 v
Cube_MX1.jpg . `/ E7 l) [: S3 I5 t
! c) f+ l3 J0 P$ @
Cube_MX2.jpg
, V3 |# E" }/ r* H! k$ g7 C, P
: [- ]# I4 l, V+ r  d9 H" k+ F, Amain.c文件内容, N# A7 O1 [& T3 n$ {8 g, i2 h" e
  1. /**
    , f" M1 c# z3 [) h9 D& \/ {3 ?# m- G
  2.   ******************************************************************************' A0 f7 k) J, w  O& \0 K- T' v" v
  3.   * 文件名程: main.c 6 S) |1 G/ Y7 C" y6 o+ H
  4.   * 作    者: 硬石嵌入式开发团队
    $ g2 K6 V$ b5 |
  5.   * 版    本: V1.05 J6 P0 C) h8 m& X
  6.   * 编写日期: 2015-10-04( w: M9 T7 G+ R; w
  7.   * 功    能: 使用通用定时器功能输出PWM波形
    9 X3 |7 i. u( @% ]9 c! f
  8.   ******************************************************************************5 b  L- A2 r6 F; d( V3 I8 B1 ]1 p, w
  9.   * 说明:
    3 J! B0 i* U8 q! x/ z+ R9 A: s
  10.   * 本例程配套硬石stm32开发板YS-F1Pro使用。
    4 K$ _5 h7 w3 O) i8 L2 n# w! n1 n
  11.   * 6 \2 d& U) m! D* |$ @9 I
  12.   * 淘宝:
    3 g% L; w5 I1 ]: }: k" h' O
  13.   * 论坛:http://www.ing10bbs.com0 t9 `* A9 f7 H! Q6 }/ M* w0 Y# R+ Q
  14.   * 版权归硬石嵌入式开发团队所有,请勿商用。
    - e9 t5 E% T* N  W! _1 K
  15.   ******************************************************************************
    % H# y, O! U( e! ~: {/ e0 u
  16.   */
    0 w3 O3 [1 d: u( U0 v
  17. /* 包含头文件 ----------------------------------------------------------------*/3 X  p$ s2 Z; Q
  18. #include "stm32f1xx_hal.h"
    . U$ r8 S2 B* u) C( U
  19. ; w% e; y3 c5 K1 `& Z
  20. /* 私有类型定义 --------------------------------------------------------------*/
    8 ]( e8 r0 J2 e* r* q
  21. /* 私有宏定义 ----------------------------------------------------------------*/
    ) c" j% V% x) v
  22. /* 私有变量 ------------------------------------------------------------------*/
    2 c! L. @3 c0 c! u7 E' w# W$ e7 o
  23. /* 扩展变量 ------------------------------------------------------------------*/- S" f5 [2 k$ a- @& u
  24. /* 私有函数原形 --------------------------------------------------------------*/6 w( B8 `2 M. @1 X9 p+ c/ V
  25. /* 函数体 --------------------------------------------------------------------*/5 t* q/ B& T7 m- ?& @
  26. /**
    + \1 z8 D: x; _- S9 M$ ~
  27.   * 函数功能: 系统时钟配置* A# W2 n" R3 L, d
  28.   * 输入参数: 无
    ! d6 T; e0 ?# D# P) q2 c) R$ l
  29.   * 返 回 值: 无3 j3 S! g7 u: m/ u! D. e% A
  30.   * 说    明: 无
    # e  q; P* x8 E% \: v, l
  31.   */
    - U6 O' G6 ^* [  J
  32. void SystemClock_Config(void): `# o5 r3 C" S# p& w( L
  33. {
    * S; G, k- ^! ]* s; S+ U
  34.   RCC_OscInitTypeDef RCC_OscInitStruct;5 Q+ H% F& c( J- R
  35.   RCC_ClkInitTypeDef RCC_ClkInitStruct;! n8 G% s/ G+ j

  36. ' x& J' @, Q1 r8 J
  37.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;  // 外部晶振,8MHz# c% v$ O) T4 D7 k- r! G
  38.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    7 v. k1 t5 i" h8 S$ a9 B. w7 _
  39.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;5 D8 {8 ^/ c6 ~8 G  C  Q3 ?
  40.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;& ?; v- j' X% e, Z9 k* \2 B& p9 w# G6 f
  41.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;; ^( s/ r! _: c6 ~$ o
  42.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  // 9倍频,得到72MHz主时钟- Y5 d2 O0 z" E$ V* L) ?- t+ d6 [
  43.   HAL_RCC_OscConfig(&RCC_OscInitStruct);
    * G3 N) k% d% q
  44. & j4 g5 C. p# F% ]
  45.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK6 ]0 q: X7 Q( U) [  ]8 A
  46.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;4 x& Y" X2 W9 z. }" T: d- M
  47.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;       // 系统时钟:72MHz# q' O  Q& f/ z4 `5 w+ G% M
  48.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB时钟:72MHz4 v/ a5 V  T" C  Q; L
  49.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;               // APB1时钟:36MHz5 V* m; n9 V$ S6 y% [
  50.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;               // APB2时钟:72MHz
    ; Y# C. ?. w1 T! z7 C
  51.   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);: p$ H! |2 r9 j0 g+ @

  52. . _, C+ O2 J& [# L5 e4 }- G
  53.     // HAL_RCC_GetHCLKFreq()/1000    1ms中断一次! |/ ?8 L+ v  i) k4 Y
  54.     // HAL_RCC_GetHCLKFreq()/100000  10us中断一次) F" P2 t2 H5 k5 }% H: [2 A4 n
  55.     // HAL_RCC_GetHCLKFreq()/1000000 1us中断一次
    $ Z: T7 k  w4 r! r: k0 w
  56.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);  // 配置并启动系统滴答定时器8 H3 b$ u7 M9 P% D" _
  57.   /* 系统滴答定时器时钟源 */
    6 n" M! ?$ Q2 [9 M: l2 W/ S
  58.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);7 J: s1 q6 @& B* U% k0 V
  59.   /* 系统滴答定时器中断优先级配置 */9 q/ W3 ]; t3 w4 w$ x6 y% V
  60.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);$ B: W* p1 w4 E4 x  Q! d
  61. }
    7 m. r. f9 l1 b3 X3 j
  62. 5 V. ^  W8 c( P/ }
  63. /**+ {( V6 |, z; f, Q5 y6 w( l
  64.   * 函数功能: 主函数.
    0 D6 N0 z' P9 g$ {- E) \
  65.   * 输入参数: 无
    5 f- @& f4 O% _1 o( j: O2 `
  66.   * 返 回 值: 无
    5 E2 j3 H0 a9 o# J  W0 g* W
  67.   * 说    明: 无5 X6 r( f: C3 q3 h8 U
  68.   */
    * z9 o2 H8 R' d. M+ [. B3 n
  69. int main(void)
    : Q6 R7 _1 ]" Z% z* ~
  70. {* \$ Q1 a) S8 b5 J( x
  71.   /* 定义IO硬件初始化结构体变量 */2 M9 D4 ]( a6 B( b) q4 n
  72.   GPIO_InitTypeDef GPIO_InitStruct;  * h5 e# h; K8 \8 z
  73.    
    ! m( G& {" a4 m1 u4 C6 v* I. L+ c5 p
  74.   /* 复位所有外设,初始化Flash接口和系统滴答定时器 */3 [- W7 W, M: V  C$ R- n$ [  w7 q4 ]" ^
  75.   HAL_Init();4 Q. q2 k) z4 f  G
  76.   /* 配置系统时钟 */
    4 A& ], _* E  r" u: }
  77.   SystemClock_Config();. {4 O9 J% {6 F( j; K1 W4 ?1 r0 P
  78.    5 @7 b; U7 d  L8 [% ?8 H3 Y* [: ~$ O) \
  79.   /* 外设时钟 */
    ' q; W- ]3 _8 j& {% \3 t/ A) T
  80.   __HAL_RCC_GPIOA_CLK_ENABLE();
    ( g: _5 _3 x. j7 U5 _4 y
  81.   __HAL_RCC_GPIOB_CLK_ENABLE();
    ' ?/ R" B: x& q/ r, y
  82.      P# D" p5 ~- O, r' O" x
  83.   /* JTAG-DP Disabled and SW-DP Disabled */4 y4 ?- r% \& x0 \4 T1 `
  84.   __HAL_AFIO_REMAP_SWJ_DISABLE();" {% a0 J( p9 X, g( c2 l* |
  85.    6 H: ^6 M5 U" n6 @2 j
  86.   /* 输出低电平 */& P+ h, Z0 p  u6 `4 D" a) Y3 I
  87.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
    9 \: E/ p; P+ h/ g1 w+ w$ G2 B
  88.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3|GPIO_PIN_4, GPIO_PIN_RESET);
    3 M0 O, g0 f" g9 I4 |6 _

  89. 6 E8 k  D  Q& U/ \
  90.   /* GPIO配置 */
    6 M) \& M" \' X$ p0 Q9 U
  91.   /* 设定引脚IO编号 */1 h) W( W; c$ M, r
  92.   GPIO_InitStruct.Pin = GPIO_PIN_15;' r8 q6 s  v6 S% q+ k
  93.   /* 设定引脚IO为输出模式 */
    * e( e% [+ k" I" z  x. n; Z: s, q
  94.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;& B; E" P% D6 V2 T5 Q
  95.   /* 设定引脚IO操作速度 */
      r* G) ]1 f6 G  V+ b% I0 e; h  P! I$ U% t
  96.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    + H4 _4 G5 \- c
  97.   /* 初始化引脚IO */+ E2 E. B7 [8 N! R
  98.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    8 |& V# f! L! \8 y; I+ w
  99.      
    ( O+ w1 J& c6 d2 b& A
  100.   /* 设定引脚IO编号 */
    . K+ n2 ]+ p/ m& m9 ~( N! n
  101.   GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4;: ^  u) B7 K# y
  102.   /* 设定引脚IO为输出模式 */
    . x+ x; _- n% [1 x; N$ z; \, J
  103.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    9 {  ]- Q3 K% _1 T# F
  104.   /* 设定引脚IO操作速度 */
    3 t$ V7 }: K) y7 |2 [; b* |2 b
  105.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;/ S9 O' @% q( F( u3 v4 _+ \
  106.   /* 初始化引脚IO */, ]: p- e- P7 L9 }5 m
  107.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    # A% v7 e& W$ ?7 |
  108.    2 z' F$ c- R7 G) Y
  109.   /* 无限循环 */' }3 `1 \+ f& }
  110.   while (1)
    - C: N- t* F1 m/ L( O$ P% D) f
  111.   {9 J5 k* Y% `, w5 p0 o
  112.     HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_15);
    9 v# d6 o: c& s) j* j+ y9 N6 J! i) {
  113.     HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3|GPIO_PIN_4);
    ! v& P. g; D* f$ I' i
  114.     HAL_Delay(1000);
    : m' Q0 m1 [7 Y: c6 t( D5 A+ M
  115.   }
    ' {' `, P/ ?1 j" v8 y& \
  116. }9 W- j4 e. `3 s7 b

  117. : F$ g8 i; ^( b* C0 e9 M8 O
  118. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码

2 i. P, _% R- w0 W  @" e, C' A2 m# V. K! R0 p' }, m

; s( Z# I  m( S9 F

点评

链接失效了  发表于 2017-12-10 11:08
赞 收藏 评论6 发布时间:2016-7-18 08:57

举报

6个回答
stary666 回答时间:2016-7-25 09:50:17
仙人掌 回答时间:2017-12-8 08:34:20
未开启复用时钟,应增加一句:* a2 J1 W, {4 k9 R: a! Q2 w# I
__HAL_RCC_AFIO_CLK_ENABLE();
haohao663 回答时间:2017-12-10 10:37:13
仙人掌 发表于 2017-12-8 08:34
- |4 v# K9 c1 @8 A/ R( }" W8 i1 e未开启复用时钟,应增加一句:4 f# e6 j6 p: E* T
__HAL_RCC_AFIO_CLK_ENABLE();

1 c) O8 E/ ^+ D' h1 U. D' n0 \7 S: |多谢回复,但实际上是有的
+ ^5 m0 V4 G) B QQ截图20171210103626.png
3 t8 `9 k6 v" ?1 G- k
haohao663 回答时间:2017-12-10 14:03:04

点评

谢谢老大  发表于 2017-12-10 22:17
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版