[应用相关] STM32的介绍及MDK

[复制链接]
9695|154
 楼主| qn7a12 发表于 2023-4-30 14:12 | 显示全部楼层
\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates
和STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include
 楼主| qn7a12 发表于 2023-4-30 14:12 | 显示全部楼层
2.M4内核需要的文件
core_cm4.h文件是CMSIS核心文件,提供进入M4内核接口,这是ARM公司提供,对所有CM4内核的芯片都一样。你永远都不需要修改这个文件。
23890644e06e70453c.png
\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Includ
 楼主| qn7a12 发表于 2023-4-30 17:04 | 显示全部楼层
3.外设驱动文件

misc.c和misc.h是定义中断优先级分组以及Systick定时器相关的函数。

stm32f3xx_rcc.c和stm32f4xx_rcc.h是与RCC相关的一些操作函数,作用主要是一些时钟的配置和使能。在任何一个STM32工程RCC相关的源文件和头文件是必须添加的。
 楼主| qn7a12 发表于 2023-4-30 17:05 | 显示全部楼层
对于文件stm32f4xx_ppp.c和stm32f4xx_ppp.h,这就是stm32F4标准外设固件库对应的源文件和头文件。包括一些常用外设GPIO,ADC,USART等
77041644e2f37a0e98.png
\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver

 楼主| qn7a12 发表于 2023-4-30 17:05 | 显示全部楼层
4.启动文件
启动文件主要是进行堆栈之类的初始化,中断向量表以及中断函数定义。启动文件要引导进入main函数。Reset_Handler中断函数是唯一实现了的中断处理函数,其他的中断函数基本都是死循环。
 楼主| qn7a12 发表于 2023-4-30 17:05 | 显示全部楼层
startup_stm32f40_41xxx.s
Reset_handler在我们系统启动的时候会调用,下面让我们看看Reset_handler这段代码
 楼主| qn7a12 发表于 2023-4-30 17:05 | 显示全部楼层
  1. ; Reset handler
  2. Reset_Handler     PROC
  3.                  EXPORT   Reset_Handler              [WEAK]
  4.         IMPORT   SystemInit
  5.         IMPORT   __main

  6.                  LDR      R0, =SystemInit
  7.                  BLX      R0
  8.                  LDR      R0, =__main
  9.                  BX       R0
  10.                  ENDP
 楼主| qn7a12 发表于 2023-4-30 17:05 | 显示全部楼层
这段代码的作用是在系统复位之后引导进入main函数,同时在进入main函数之前,首先要调用SystemInit系统初始化函数。

\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm
 楼主| qn7a12 发表于 2023-4-30 17:06 | 显示全部楼层
5.对于STM32F40系列的工程,还需要添加一个全局宏定义标识符
STM32F40_41xxx,USE_STDPERIPH_DRIVER
至关重要,一个符号都不要错,最后面是空的
84243644e2f796cf73.png
 楼主| qn7a12 发表于 2023-4-30 17:06 | 显示全部楼层
程序下载电路
95581644e2f90dbe27.png
USB 转串口,CH340G,是国内芯片公司南京沁恒的产品,稳定性经测试还不错,所以还是多支持下国产。
 楼主| qn7a12 发表于 2023-4-30 17:06 | 显示全部楼层
首先,mcuisp 控制 DTR 输出低电平,则 DTR_N 输出高,
然后 RTS 置高,则 RTS_N 输出低,这样 Q4 导通了,BOOT0 被拉高,即实现设置 BOOT0 为 1
同时 Q3 也会导通,STM32F4 的复位脚被拉低,实现复位。
然后,延时 100ms 后,mcuisp 控制DTR为高电平,则DTR_N输出低电平,RTS维持高电平,则RTS_N继续为低电平
此时STM32F4的复位引脚,由于 Q3 不再导通,变为高电平,STM32F4 结束复位
但是 BOOT0 还是维持为1,从而进入 ISP 模式,接着 mcuisp 就可以开始连接 STM32F4,下载代码了,从而实现一键下载。
 楼主| qn7a12 发表于 2023-4-30 17:07 | 显示全部楼层
STM32调试
JLink
JTAG与SWD是个接口,JLink指的是仿真器
串口只能下载代码,并不能实时跟踪调试,而利用调试工具,比如 ST-LINK,JLINK 和ULINK 等就可以实时跟踪程序,从而找到你程序中的 bug,使你的开发事半功倍。
89458644e2fb606aab.png
 楼主| qn7a12 发表于 2023-4-30 17:07 | 显示全部楼层
JTAG/SWD
调试原理
86035644e2fc76541e.png
串行接口,就是SWD,通信数据线两根
 楼主| qn7a12 发表于 2023-4-30 17:07 | 显示全部楼层
JTAG,通信数据线五根,所以用SWD多
70912644e2fe33cd6b.png
 楼主| qn7a12 发表于 2023-4-30 17:07 | 显示全部楼层
使用SWD的话,只需要SWDIO与SWCLK两个引脚。
使用JTAG的话,五个引脚都要用到。
 楼主| qn7a12 发表于 2023-4-30 17:08 | 显示全部楼层
SWD与JTAG的端口映射
63446644e2ffd4337b.png
 楼主| qn7a12 发表于 2023-4-30 17:08 | 显示全部楼层
默认的五个口不能作为IO口输出
7118644e300dc7e08.png
 楼主| qn7a12 发表于 2023-4-30 17:08 | 显示全部楼层
认这五个引脚复位了之后都是用来仿真的,是不能正常使用的,只有禁止了相应的端口,才能释放IO引脚
 楼主| qn7a12 发表于 2023-4-30 17:09 | 显示全部楼层
JTAG/SWD硬件
68202644e3028d015d.png
STM32 的 SWD 接口与 JTAG 是共用的,只要接上 JTAG,你就可以使用 SWD模式了(其实并不需要 JTAG 这么多线),当然,你的调试器必须支持 SWD 模式,JLINK V7/V8、ULINK2 和 ST LINK 等都支持 SWD 调试。
 楼主| qn7a12 发表于 2023-4-30 17:09 | 显示全部楼层
设置禁止JTAG
(在文件stm32f10x_gpio.c中):调用该函数,有三个选项。407没有复用概念。
  1. void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部