logo
0
0
WeChat Login

STM32 sample codes

Description

Use stdPeriph to implement simple functions

Use codes fom STM32Cube Firmware to implement SDIO, SPI-SD and USB funcitons.These code need HAL/LL (not stdPeriph) Lib so I need a new keil project.

Tips

  • BOOT1=X BOOT0=0:从用户闪存(flash)启动,一般使用这种模式
  • BOOT1=1 BOOT0=1:从内置SRAM启动,这种模式可以用于调试
  • BOOT1=0 BOOT0=1:从系统存储器启动,这种可以用于调试
  • 通常情况下不要使用 BOOT0 和 BOOT1 占用的 GPIO 引脚,因为不能直接使用,必须进行额外的设置才能使用
  • SysTick初始化时默认配置的优先级是最低的,如果在中断处理中用到了延时,要配置定时器的优先级高于其他中断的优先级。用其他定时器做延时的时候也是一样。

keil

  • 只要用到了串口重定向 printf 就一定要勾选 usb microlib,否则运行、调试时会出现问题
  • 进行模拟调试时 Dialog DLL 设置为 DARMSTM.DLL,Parameter 设置为 -pSTM32F103ZE(根据芯片型号而定)而且项目设置中的 Xtal 值要设置得和 __SYSTEM_CLOCK 宏一致。
  • 进行真机调试时,Options for Target 对话框,Debug标签页,调试工具下面的 Load Application at Startup 要勾选,C/C++ 标签页的 Optimization 为 0,且 BOOT0 为 1 才能调试。
  • 使用 ST-Link 进行烧录时,使用 ST-Link 上的 3V3 给单片机供电可能会供电不足导致中途失败或根本无法使用。可以用 CH341A 上的 3V3 供电。
  • 在 Windows 上进行格式化后,使用 FatFs 遍历目录会失败(一直卡在 f_opendir 这个函数这里),使用 FatFs 进行格式化不会出现这个情况
  • Keil 有个 BUG:当设置 5 个以上断点会无法进入 main,移除一些断点重新进入调试即可。如果程序跳入了 Hard Fault,注意是否有堆栈溢出,或者烧录的代码和调试中的代码不一致。
  • Keil 编译器有时有个 BUG:while(var==VAL); 必须写成 while(var==VAL){}
  • 注意检查线路是否连接正确,分析清楚再开始操作

Useful Pictures

下图的 SPI1 应该是位于右侧,UART1 应该是位于左侧,不知道为什么图中画了两个(貌似是端口重映射)

About

一些 stm32 功能的示例程序

7.62 MiB
0 forks0 stars1 branches0 TagREADMELGPL-3.0 license
Language
C40.9%
Assembly4.3%
HTML0.7%
CMake0.1%
Others54%