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

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

[复制链接]
haohao663 发布时间:2016-7-18 08:57
HAL库每天一例】系列例程从今天开始持续更新。。。。。- u: _2 a- l% s$ L2 L
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,4 E7 Y- c% U+ g2 x$ ~$ U
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
, M5 z. l& g+ a) ]9 S  q  e' u同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。6 ]& Y) ?/ ~$ x% d

8 S+ B0 i3 h8 U+ W! z例程下载:
6 n7 `% ~, G5 y' Q) l" H* N2 L资料包括程序、相关说明资料以及软件使用截图
: ~3 [' O: X" e" \- }百度云链接:https://pan.baidu.com/s/1i574oPv ( I4 x' G0 ^. ?, ~
密码:r3s3
: [/ ]2 y5 _3 a- d
(硬石YS-F1Pro开发板HAL库例程持续更新\2. 软件设计之高级裸机例程(HAL库版本)\YSF1_HAL-101. JTAG功能引脚做为普通IO使用
6 K6 o( X/ U; P6 }

- P" m% a! p) ~8 j2 G7 o
/**
7 H5 e6 L: f) O, k" H4 J  ******************************************************************************
! u( m! \% u- W  *                           硬石YS-F1Pro开发板例程功能说明
: s$ D! `! t4 |3 F" M  *
1 z7 R6 U4 x: \2 t$ ]+ a7 r' M" [  *  例程名称: YSF1_HAL-101. JTAG功能引脚做为普通IO使用
6 s; E) Z' F5 b* @: M  *   
$ `. I% G! M0 t" U  ******************************************************************************
& Z' v$ y; U+ N, ~6 U  * 说明:
& a8 q8 C5 {. m# y" J9 r1 @" H  * 本例程配套硬石stm32开发板YS-F1Pro使用。8 `/ W$ @2 ~7 ~& U6 f
  *
/ ~& M$ ~, W) g8 `! I9 m  * 淘宝:0 N7 p$ g6 A6 t
  * 论坛:硬石电子社区
! L$ |8 G0 V; u4 {  * 版权归硬石嵌入式开发团队所有,请勿商用。; c' @% Q4 B8 g% q4 r
  ******************************************************************************
% g: u4 K3 n  ^2 ~  u  */3 Q+ U; B2 I7 |* k, [9 Z2 g

; N* V  D' E# m$ N【1】例程简介
. j3 h) G5 |# c7 r4 y" Q- W; G8 |! |  使用stm32 HAL库函数实现LED流水灯效果。通过这个例程熟悉stm32 HAL库函数编程思想。' e! k3 E/ m% g; C3 l
: ?5 q! N) ]  Z& }0 n( r' F4 `, j
  stm32拥有非常多的IO引脚,这些IO引脚可以用作最简单的控制电平控制,可以设置为输出高电0 s6 K: S; \$ [6 B5 ?
平(数字量:1,对应3.3V)或者低电平(数字量:0,对应0V),也可以设置为输入模式,读取这个IO引* k9 d2 X; J# k
脚的电平(比如用于按键状态读取)。  本例程我们调用HAL库函数方法来实现对IO引脚的输出高低
' ~. Q" Y( K& y+ I电平进行控制。  " g: l8 E. b! Z1 \) j
  
% M8 b& p' s" d* Q& \; t【2】跳线帽情况
" n1 M9 D; ~/ R******* 为保证例程正常运行,必须插入以下跳线帽 **********& Z" A' J+ `/ O; z1 r* k
丝印编号     IO端口      目标功能引脚        出厂默认设置
0 \& D. \) O7 j2 a( X/ F0 [
$ ]4 U; h0 p$ x. U: h0 A  
' J' b4 B" ~9 a7 D. C【3】操作及现象
! m7 E  _4 ?* u. @, C  使用开发板配套的MINI USB线连接到开发板标示“调试串口”字样的MIMI USB接口为开发板供电。7 H3 t# h- l* i# H$ u
下载完程序之后,使用万用板测量PA15、PB3和PB4引脚电平可以观察到电压连续变化。) `0 x6 C4 f( U

) e  D: W* r! s/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
; S& R, F4 }! h* [7 V Cube_MX1.jpg
3 V, ?0 S' Z1 ?2 x4 B  J/ V! \
6 L+ @# ^. D1 z# v; M! l
Cube_MX2.jpg - k9 \; F. F4 t

7 [* Y0 r0 d$ @main.c文件内容
: R" m$ O. i8 m2 d# e/ P. @( @/ e
  1. /**# T5 t3 c' T6 N* b1 }8 X5 J
  2.   ******************************************************************************& q& l# X5 X$ f! N6 Y; E
  3.   * 文件名程: main.c / l- q8 z/ x( m$ Z; n
  4.   * 作    者: 硬石嵌入式开发团队) {- _$ b! z, N8 S- v; @
  5.   * 版    本: V1.0
    & E# s# ]. z) C" h! t" Q! ?. v
  6.   * 编写日期: 2015-10-04
    ( }) P5 r5 G6 e% Q7 C1 q, ]% r% K' R
  7.   * 功    能: 使用通用定时器功能输出PWM波形1 |' |2 }; B2 r; T* D. d  m
  8.   ******************************************************************************
    ! I0 B' N. N! H+ b# G4 i# x
  9.   * 说明:
    : _) r9 w/ e. D* C, ~' s$ S
  10.   * 本例程配套硬石stm32开发板YS-F1Pro使用。; |& Y5 A7 r9 y) W, ]5 m5 U3 h
  11.   *
    / L  d) Y/ t' J9 j, k3 {0 X: Y
  12.   * 淘宝:" S) B' Y4 C( y/ Q. \- W7 X
  13.   * 论坛:http://www.ing10bbs.com
    + r" k  ~& w( M1 D; X
  14.   * 版权归硬石嵌入式开发团队所有,请勿商用。2 F3 Y" y- S" ~! o) s
  15.   ******************************************************************************
    / ]$ M# F$ d2 Z2 m$ ?
  16.   *// y0 e/ \) K/ `3 U
  17. /* 包含头文件 ----------------------------------------------------------------*/
    3 W- n% I3 Z/ d/ e, m* j
  18. #include "stm32f1xx_hal.h"* g, m3 S( M% l

  19. 7 }4 N5 y& w8 N4 _# m
  20. /* 私有类型定义 --------------------------------------------------------------*/; V2 V/ f* h" y. k; ~. H( G
  21. /* 私有宏定义 ----------------------------------------------------------------*/
    . D- Y' l' _9 ]  U
  22. /* 私有变量 ------------------------------------------------------------------*/
    - `% H" f1 u( U+ k7 M. x1 ~+ `
  23. /* 扩展变量 ------------------------------------------------------------------*/
    1 O& P3 C/ n/ [0 B* x$ B. j
  24. /* 私有函数原形 --------------------------------------------------------------*/
      w7 r& a0 D) [% ?
  25. /* 函数体 --------------------------------------------------------------------*/0 O; t; r9 I# }4 G' M+ m* X, j
  26. /**# _# I3 B1 s+ f3 Q6 l
  27.   * 函数功能: 系统时钟配置5 c" k5 {/ P% i* M
  28.   * 输入参数: 无
    / w- u6 w, e( D- M
  29.   * 返 回 值: 无+ w; z4 P# r; {# q1 ^
  30.   * 说    明: 无
    ' a! i- Y0 @4 \6 a9 @2 k
  31.   */8 M+ T' U3 d8 Q/ a( z7 b
  32. void SystemClock_Config(void)" _2 m. ~: K- E) j- L5 r% b
  33. {3 H" W$ |& m9 l* J! c1 j
  34.   RCC_OscInitTypeDef RCC_OscInitStruct;
    9 Z# C' B# q% g! v! g
  35.   RCC_ClkInitTypeDef RCC_ClkInitStruct;
    . Q3 x& k. {% b) h0 k/ A5 }% L
  36. 2 G6 }) z& h6 c1 @6 S8 _/ B+ [7 R
  37.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;  // 外部晶振,8MHz  m( L" D3 s: q  E& e8 _
  38.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    1 V# c! h, z2 y2 I& S, ?6 z/ G& t
  39.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
    4 Y2 Q+ W; C2 {+ i0 u
  40.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
      ]: w1 a# N8 v
  41.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    + o# S+ ^  s* W+ P* T
  42.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  // 9倍频,得到72MHz主时钟
    4 u* I  H* @. g' Y0 |! {
  43.   HAL_RCC_OscConfig(&RCC_OscInitStruct);
    ' a* s+ \7 l7 R! T$ c! S
  44. 1 g" ]* u3 F: u
  45.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    ! W4 |9 J7 T+ G6 g9 v
  46.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;5 U, h( O! B# S9 ^" Z
  47.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;       // 系统时钟:72MHz3 V: A2 N( i; E9 L) X$ i
  48.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB时钟:72MHz
    ( B* C) w6 e+ ?4 o
  49.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;               // APB1时钟:36MHz0 n" c; |; l( t! _  G
  50.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;               // APB2时钟:72MHz/ M% p1 p2 O  T
  51.   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
    ' e4 G7 D; O3 z) K+ r4 @2 d; P

  52. 9 w0 q+ F+ w! Q( _$ S, K/ ?
  53.     // HAL_RCC_GetHCLKFreq()/1000    1ms中断一次
    / {/ C9 o$ K4 G& q1 I# E( Z" p- d( y
  54.     // HAL_RCC_GetHCLKFreq()/100000  10us中断一次: m3 V: |* J4 i: z6 P9 a, |9 I
  55.     // HAL_RCC_GetHCLKFreq()/1000000 1us中断一次2 o6 D" ]6 o( R- u% h( e3 T
  56.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);  // 配置并启动系统滴答定时器( ~3 @# g& X+ G, w7 a! \/ v
  57.   /* 系统滴答定时器时钟源 */- P: k* c' Q- _0 a+ A
  58.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
    3 c; X% ^+ w+ ]9 v8 w: v
  59.   /* 系统滴答定时器中断优先级配置 */
    " u" Z/ V: m+ f& v0 n
  60.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);! B! u9 T- T/ p+ D
  61. }
    8 A0 {- Y6 ?" O" z6 F" o  M+ q
  62. $ S  `: X5 T! d. a6 G7 ]# @
  63. /**
    6 X% G  _; Q- D( k- b
  64.   * 函数功能: 主函数.
    6 B  A% D7 t  d7 m; Z
  65.   * 输入参数: 无3 P0 I. l/ E' H/ J3 k
  66.   * 返 回 值: 无; @2 l1 N* o# X8 v" E% r5 M  A
  67.   * 说    明: 无
    ' Q* Q5 ~; q; j6 n3 A8 A: [8 F
  68.   */, b$ E  H6 f7 m& U
  69. int main(void)
    2 `( [: C8 w% F3 D. p' A
  70. {
    4 f6 j( p/ |4 E1 _  J" s/ L2 l
  71.   /* 定义IO硬件初始化结构体变量 */5 Y- h+ A/ R+ D, B( ?7 M+ O2 u
  72.   GPIO_InitTypeDef GPIO_InitStruct;  
    ) s5 C/ \4 E& ^  f. c9 ^6 P
  73.    
    + @6 M3 G# S9 ^3 P0 p- ?' W, j
  74.   /* 复位所有外设,初始化Flash接口和系统滴答定时器 */' g6 y5 R9 p5 u6 A6 A2 P
  75.   HAL_Init();$ }0 i5 t9 G8 ~- t3 k4 U( {
  76.   /* 配置系统时钟 */5 k) x% d; A* ^/ h" r/ [+ J
  77.   SystemClock_Config();
    - D0 S* j" k& P  g( @4 C
  78.    
    " t* J" m5 ^: X- Z  `
  79.   /* 外设时钟 */3 }% `, f! C3 a$ M
  80.   __HAL_RCC_GPIOA_CLK_ENABLE();
    % n4 v/ p0 z8 z5 T* O+ y
  81.   __HAL_RCC_GPIOB_CLK_ENABLE();" [8 u# e+ i3 x, J! k; D. m
  82.    
    - x! E. l, Z- x
  83.   /* JTAG-DP Disabled and SW-DP Disabled */
    % i1 @/ h- C/ d6 o0 l) L
  84.   __HAL_AFIO_REMAP_SWJ_DISABLE();* W' R7 F/ t+ X; G3 |* u0 j
  85.    2 m4 B# W+ \6 }, E% ~$ N
  86.   /* 输出低电平 */0 f+ G& X% n+ ]6 L! n5 t2 h
  87.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
    - Q- ~% l( |& c& c" Z% g
  88.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3|GPIO_PIN_4, GPIO_PIN_RESET);
    ) W1 V" k* ]( a) k* ?6 m' i) ^
  89. 9 X  `7 g$ z3 P/ K/ X- K
  90.   /* GPIO配置 */
    $ l0 g& I+ F. m8 ~0 e/ u9 n" t5 a4 }
  91.   /* 设定引脚IO编号 */
    : ~, }/ T* J0 L3 a
  92.   GPIO_InitStruct.Pin = GPIO_PIN_15;# V% o+ b; s5 `5 h
  93.   /* 设定引脚IO为输出模式 */
    8 I' x1 d8 _4 m
  94.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;' Y# Y9 a% P5 }6 t# o/ s7 E$ ?( r% x
  95.   /* 设定引脚IO操作速度 */
    2 }4 @0 R& w# y" D$ ]! w* I5 e/ L
  96.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;! E! Q, G" k1 R9 u6 d
  97.   /* 初始化引脚IO */
    + S! _7 s- D, v
  98.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);, g) p: @* L: j6 Z4 ~0 |# r1 `. V
  99.      3 ^8 O% P, h, S4 Q% j; W  q
  100.   /* 设定引脚IO编号 */# s8 C5 |% z0 o) d9 p8 X
  101.   GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4;/ N: W/ H0 o6 L  v
  102.   /* 设定引脚IO为输出模式 */, L9 U: [7 H! n( x' r6 ~
  103.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;8 Y* a) ~3 P0 w  t
  104.   /* 设定引脚IO操作速度 */
    ! [; b5 Y9 n. y
  105.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;4 k5 n# W9 B9 i' [4 y  Z: X' e
  106.   /* 初始化引脚IO *// ?4 w+ ]1 T% p4 y
  107.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    ( G. g1 k7 D" I9 n4 r, G9 t
  108.    
    6 v' _2 l  W  Z/ W
  109.   /* 无限循环 */
    2 z( F/ b' w! z( V& x
  110.   while (1)9 J4 Y0 `" S$ Q. q
  111.   {
    4 C, a+ P  ~( ~1 E% p/ d
  112.     HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_15);
    9 R! z4 ]2 n; d- J" Y/ G
  113.     HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3|GPIO_PIN_4);
    - i. C0 ^/ e/ o* G- [- D
  114.     HAL_Delay(1000);- J* f6 j, P& K9 n
  115.   }
    0 H0 v6 s& |5 o' u) ]$ m% n
  116. }, u* ~; K8 N2 T; M5 ]$ f7 d
  117. - z3 H: H- C( }$ b, t2 Y
  118. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码

6 x6 u/ Z. x- w: Z
9 ~% B0 |: t" `0 ^0 @, {" t

2 ?4 `3 K. z$ G9 X

点评

链接失效了  发表于 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
未开启复用时钟,应增加一句:
) }) X+ k* m- R* E% g__HAL_RCC_AFIO_CLK_ENABLE();
haohao663 回答时间:2017-12-10 10:37:13
仙人掌 发表于 2017-12-8 08:34: Q. c$ K  Z/ @( r1 r
未开启复用时钟,应增加一句:
% e6 v0 r/ A1 C/ e! Q__HAL_RCC_AFIO_CLK_ENABLE();
3 s$ |& L3 l5 O9 e
多谢回复,但实际上是有的
9 z- E) B3 Z* I& j QQ截图20171210103626.png " n. o' o1 R9 e- E5 Z: t
haohao663 回答时间:2017-12-10 14:03:04

点评

谢谢老大  发表于 2017-12-10 22:17

所属标签

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