STM32手册

STM32

hardware setup

ST-LINK v2

SWCLK (clock) ; SWDIO (data input & output) ; power supply (for the micro chip) you can find the corresponding pins on stm32 chip (SWCLK SWDIO)

SWCLK pull low externally (link to GND); SWDIO pull high

for JTAG , pins are same (正点原子 STM32F1 的板子)

在这里插入图片描述

you can also find SWDIO is pulled up while SWCLK is pulled down.

Degub protoptype (JTAG / SWD)

https://blog.csdn.net/LEON1741/article/details/72846434

JTAG 是芯片内部的测试协议。标准的JTAG接口是4线:TMS、 TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。 相关JTAG引脚的定义为:

TMS:测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;

TCK:测试时钟输入;

TDI:测试数据输入,数据通过TDI引脚输入JTAG接口;

TDO:测试数据输出,数据通过TDO引 脚从JTAG接口输出;

SWD,串行调试(Serial Wire Debug), 更少的引脚(4 个), 大数据下更稳定。

在这里插入图片描述

可以看到对上面正点原子的板子, SWD 与 JTAG 共用了一个口

SWD 相比于 JTAG 使用接口更少,只需要 SWDIO, SWCLK, VCC, GND 四根线(stm32f103-minimum 上的四个借口)

仿真器

jlink

基于 JTAG 仿真,面对计算机采用 USB 口, 对板仍然采用 JTAG 口

ST - link

专门针对 ST 公司的芯片, 可以烧写,仿真,下载。 st-link v2 对于 JTAG 和 SWD 是通用的,在 Keil 可以随意选择。

烧写

  • openocd

参见 nuttx 中 openocd 安装与烧写方法

openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c init -c "reset halt" -c "flash write_image erase nuttx.bin 0x08000000"

openocd 也可以用来和芯片相连接,提供调试的本地端口。

openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg

openocd 配置文件在 /usr/local/share/openocd/scripts 下。interface 对应的是调试器硬件 (stlink-v2, …) target 对应是板子

  • stlink

使用 stlink 驱动烧写。此时 BOOT0BOOT1 引脚拉低,从 FLASH 启动。

  • 串口烧写程序

STM32CubeProgrammer

在这里插入图片描述
选择串口模式,然后启动方式选择 System Memory,用串口连接后烧写程序。

  • 烧写时的 BOOT 引脚设置。
BOOT0 BOOT1 启动方式
0 无关 用户闪存存储器启动 (User Flash memory)
1 0 从系统存储器启动 (System memory)
1 1 从内嵌SRAM 启动 (Embedded SRAM)
  • User Flag memory

正常工作模式

  • System Memory

系统存储器是芯片内部一块特定的区域, ST 在出厂时,在内部预置了一段 bootloader, (ROM)。在 bootloader 帮助下,通过串口下载程序到 flash 中。

  • Embedded SRAM

该模式用于调试代码(不需要全部擦除从来)

2020.5.30 晚上一直不清楚 stlink-v2 通过 openocd 无法连接芯片的原因。后来发现是 Boot 接线不对,导致驱动检测不到芯片。

若从主闪存启动,从地址 0x0800 0000 访问,这也就是通过 openocd 烧写指定的地址。

内置 SRAM 是在 0x2000 0000

Debug

目前调试可以用 openocd 完成。注意在启动文件中修改烧写文件区域的大小。

arm-none-eabi-gdb nuttx # program name

# gdb interface
target remote localhost:3333 # connect to the localhost port provided by openocd
monitor reset # reset chip
monitor halt  # halt the program

load nuttx    # load binary file

monitor 是本地远程发送到芯片的命令。

Custom Board

这里记录一些见到过的板子和使用HAL时注意事项。

STM32F407G-DISC1

STM32 官方的板子。这个板子有意思地方在于板上集成 了一个 stlink-v2 调试器,不需要自己再购买一个。 CN3 控制调试器选择。跳接时,选择板上集成的调试器。否则可以用自己的调试器,直接连接在 GPIO 管脚上。

STM32F103ZET6(正点原子战舰板)

裸片配置:

  1. RCC 里面选中 HSELSE
  2. sys 里面 Debug 选择 Serial Wire。(不然无法用 ST-Link 调试)
  3. 检查 NVIC --> Code Generation --> System Tick Timer 是否生成中断响应函数 IRQ 并调用 HAL 处理函数(HAL_Handler)。

记得把板子左侧的电源接口插着。

communication

UART

异步收发串行通信 <–> 同步方式 (USART)

规范标准 : RS232. RS449

COM 是 PC 上异步串行通信口 RS232

UART 协议

开始时保持低电平是为了保证数据线正常。以低电平表示开始传输数据。UART 在接受完成后,将设置标记表示数据可用( 中断处理函数中常作检验 ),并产生一个处理器中断。使用 UART 时会有一个 Hard Ware Control Flow 选项,对应是 RTSCTS 管脚,用以辅助数据传输。相应的在 HAL 库中读取寄存器并与标志比较,判断是否下一次传输。(函数 UART_WaitOnFlagUntilTimeout )在 minicom 中同样需要配置Hardware control flow 选项。

CTS <--->  RTS
RTS <---> CTS

CAN

CAN 协议通过以下五种数据帧通讯。

chip Reg

CLOCK

RCC (Reset Clock Control)

AHB (Advanced High performance Bus)

GPIO

MODER (mode register)

OTYPER (output type register)

IDE

Program

stmf4xx.h has defines about registers

RCC -> AHBENR |= RCC_AHBENR_GPIOCEN ; // or (1 << 19) specify the bits

// set zero

GPIOC -> OTYPER &= ~(...)

ASSEMBLY CODE

eg. inline assembly code

int x = 1, y = 2 ;
int res = 0;
__asm ("ADD %[result], %[input_x], %[input_y]"
    : [result] "=r" (res)
    : [input_x] "r" (x), [input_j] "r" (y)
)

格式为

stem Type > STM32 Peripheral Support 中确定使用的外设

> System Type > Alternate Pin Mapping 中确定重映射关系

PWM

在 boards 下 stm32f103-minimum config 中配置 pwm Timer 和 output channel 。在 stm32f103-minimum.h 中确认定义的通道和定时器与 config 中一致

> System Type > Timer Configuration 配置定时器的使用模式,输出通道

猜你喜欢

转载自blog.csdn.net/lib0000/article/details/112346210
今日推荐