/g_stmf407

hacking STMF407

Primary LanguageCGNU General Public License v3.0GPL-3.0

happy hacking for STM32F407

维护者联系方式

  • 微信: grey0612 添加时务必备注F407并说明自己的沟通目的
  • Email: greyzhang@126.com

学习规划

手头有一个ARM开发板,主芯片是STMF407。工作多年,这部分接触的比较少,我自己工作的行业开发中几乎用不到ARM芯片,也有着不同的开发模式。希望经过这么一个平台能够练练手,从中学到点不一样的东西。按照自己的经验,想来可能会又如下的练习项目:

  • 软件开发环境熟悉(DONE)
  • 调试器与烧写器的熟悉(DONE)
  • Hello World例程(DONE)
  • LED灯闪烁(DONE)
  • 周期性定时器中断(DONE)
  • GPIO(DONE)
  • 定时器
  • 简单的周期性任务调度(DONE)
  • 独立看门狗(DONE)
  • 窗口看门狗(DONE)
  • RTOS
  • ADC
  • CAN
  • 串口
  • SPI
  • IIC
  • 以太网
  • SD卡
  • 文件系统
  • 数码管
  • 显示屏幕
  • XCP
  • UDS
  • J1939
  • Flash
  • CAN Bootloader
  • 蜂鸣器(DONE)

开发与调试环境

  • 开发环境:STM32CubeIDE 1.0.2

这个是从ST官方网站上找到的一个IDE,是否收费等没有去看,从目前了解到的信息看做个简单的小功能调试学习是没问题的,而这基本上可以满足我自己的需求。 搭建方法参考探索笔记N136

  • 调试工具STLink

调试工具其实是很多的,每一种的使用方法也是大同小异。于我而言,我觉得调试器最基本的两个功能就是烧写程序以及查看变量数值,其他的高级的功能只是能够加速我们问题定位的速度而已。其实,我觉得只要有一个printf,高级的调试器基本上也可以省略了。 STLink的驱动安装方法,参考探索笔记N137

探索

开发板资源

MCU - STMF407

  • 168MHZ工作频率
  • M4内核,支持单浮点
  • 90nm工艺和ART加速,flash零等待
  • 2个USB OTG,其中一个支持HS
  • 专用音频PLL和2刚全工I2S
  • 6个速度高达11.25Mb/s的USART
  • 3个速度高达45Mb/s的SPI
  • 3个IIC
  • 2个CAN
  • 一个SDIO
  • 2个12位DAC
  • 3个12位ADC
  • 17个定时器,频率高达168MHz的16和32位定时器
  • 1M Flash
  • 192 + 4K Ram

探索笔记

开发环境搭建

功能探索

  • Hello World

没有找到printf的支持,但是找到了一个变量实时显示的功能,我觉得在嵌入式调试中这是一个更好用的printf。

  • printf与hello world

之前想实现这个功能没实现,最早想实现基于调试器的,没有找到合理的方式。今天尝试了串口初步并且增加了这个功能的串口实现。实现的记录可以参考N141。

N141:https://blog.csdn.net/grey_csdn/article/details/101316149

参考代码: 05_printf_hello_world

N138, 138_STM32F407_hello world: https://blog.csdn.net/grey_csdn/article/details/101160252

相关代码: 02_hello_world

  • LED灯闪烁

N139, 实现以及测试说明: https://blog.csdn.net/grey_csdn/article/details/101163321

相关代码: 03_led_blink

  • 周期性定时器中断

这个功能基本上是一个嵌入式软件开发很重要的一个开始,基于这个功能我们可以获得一个较为准确的时间判断以及周期性的调度。

N140, 实现以及测试说明: https://blog.csdn.net/grey_csdn/article/details/101173457

相关代码: 04_systick

  • 定时器之RTC

一个计时时钟功能,同时支持日历。

N142:https://blog.csdn.net/grey_csdn/article/details/101388097

相关代码: 06_rtc

  • 简单的周期性任务调度

N143, 一个简单的周期性任务调度的实现: https://blog.csdn.net/grey_csdn/article/details/101392096

  • FreeRTOS

N144, FreeRTOS运行初步: https://blog.csdn.net/grey_csdn/article/details/101476967

相关代码: 08_freeRTOS_demo

N145, FreeRTOS运行卡死问题解决: https://blog.csdn.net/grey_csdn/article/details/101639504

相关代码: 09_freertos_exp1

N148, 利用IDE创建FreeRTOS Task: https://blog.csdn.net/grey_csdn/article/details/102070144

相关代码: 10_freertos_exp2

N149, FreeRTOS中集成RTC功能: https://blog.csdn.net/grey_csdn/article/details/102072082

相关代码: 11_freertos_rtc

N154, 使用TIM1作为系统的TB: https://blog.csdn.net/grey_csdn/article/details/102227693

  • GPIO

N150, 按键识别: https://blog.csdn.net/grey_csdn/article/details/102079925

相关代码: 12_freertos_key_scan

  • 蜂鸣器

N151,蜂鸣器驱动: https://blog.csdn.net/grey_csdn/article/details/102174056

相关代码: 13_beep

  • 窗口看门狗

N152, 窗口看门狗: https://blog.csdn.net/grey_csdn/article/details/102220331

相关代码: 14_window_wdg

  • 独立看门狗

N153, 独立看门狗: https://blog.csdn.net/grey_csdn/article/details/102222205

相关代码: 15_iwdg