All Projects → Staok → stm32_framework

Staok / stm32_framework

Licence: AGPL-3.0 license
一个志在实现STM32F1、F2和F4工程模板的项目,集成了FreeRTOS、LWIP、FATFS、DSP、USB、IAP、菜单库、有限状态机模板等等的组件,以及未来将加入的加密、BPNN、最小二乘、音频图片视频解码、LittlevGL等诸多常用的算法或组件,并具有良好的易用性、解耦性和可剪裁性!

Programming Languages

c
50402 projects - #5 most used programming language
assembly
5116 projects
CMake
9771 projects
Makefile
30231 projects
CSS
56736 projects
perl
6916 projects

Projects that are alternatives of or similar to stm32 framework

pid-stm32f746
Embedded graphical interface for PID control
Stars: ✭ 29 (-68.13%)
Mutual labels:  stm32, freertos
XC-OS
Open source graphics operating system for microcontroller
Stars: ✭ 66 (-27.47%)
Mutual labels:  stm32, freertos
Modbus-STM32-HAL-FreeRTOS
Modbus TCP and RTU, Master and Slave for STM32 using Cube HAL and FreeRTOS
Stars: ✭ 272 (+198.9%)
Mutual labels:  stm32, freertos
FreeRTOS-rust
Rust crate for FreeRTOS
Stars: ✭ 159 (+74.73%)
Mutual labels:  stm32, freertos
STM32 Base Project
STM32 Base project with a lot of stuff
Stars: ✭ 58 (-36.26%)
Mutual labels:  stm32, freertos
stm32f10x makefile freertos
stm32f10x gcc makefile freertos
Stars: ✭ 28 (-69.23%)
Mutual labels:  stm32, freertos
platformio-libopencm3-freertos
Sample blinky project for PlatformIO using libopencm3 and FreeRTOS
Stars: ✭ 14 (-84.62%)
Mutual labels:  stm32, freertos
STM32 XPD
STM32 eXtensible Peripheral Drivers
Stars: ✭ 38 (-58.24%)
Mutual labels:  stm32, peripheral-drivers
Dapboot
DFU Bootloader for STM32 chips
Stars: ✭ 194 (+113.19%)
Mutual labels:  stm32
Smartimu
Inertial Sensor Development Kit,STM32F411C、NRF52810、MPU9250、LPS22HB
Stars: ✭ 231 (+153.85%)
Mutual labels:  stm32
Opensimplelidar
Open Source scanning laser rangefinder
Stars: ✭ 2,206 (+2324.18%)
Mutual labels:  stm32
Frosted
Frosted: Free POSIX OS for tiny embedded devices
Stars: ✭ 194 (+113.19%)
Mutual labels:  stm32
STM32 TimerInterrupt
This library enables you to use Interrupt from Hardware Timers on an STM32F/L/H/G/WB/MP1-based board. These STM32F/L/H/G/WB/MP1 Hardware Timers, using Interrupt, still work even if other functions are blocking. Moreover, they are much more precise (certainly depending on clock frequency accuracy) than other software timers using millis() or micr…
Stars: ✭ 27 (-70.33%)
Mutual labels:  stm32
Runcpm
RunCPM is a multi-platform, portable, Z80 CP/M 2.2 emulator.
Stars: ✭ 192 (+110.99%)
Mutual labels:  stm32
arm-hard-fault-handler
What to do when Hard fault hits? Debugger and error reporter solution for ARM Cortex M3 and M4.
Stars: ✭ 32 (-64.84%)
Mutual labels:  stm32
Emuflight
EmuFlight is flight controller software (firmware) used to fly multi-rotor craft.
Stars: ✭ 184 (+102.2%)
Mutual labels:  stm32
Dirtyjtag
JTAG probe firmware for STM32F1
Stars: ✭ 183 (+101.1%)
Mutual labels:  stm32
STBlueMS Android
"ST BLE Sensor" Android application source code.
Stars: ✭ 93 (+2.2%)
Mutual labels:  stm32
pubsub-c
Pub/Sub library for C
Stars: ✭ 39 (-57.14%)
Mutual labels:  freertos
W25qxx
w25qxx SPI FLASH driver for stm32 HAL
Stars: ✭ 211 (+131.87%)
Mutual labels:  stm32

stm32_framework

   _______  _______  __   __  _______  _______ 
  |       ||       ||  |_|  ||       ||       |
  |  _____||_     _||       ||___    ||____   |
  | |_____   |   |  |       | ___|   | ____|  |	  欢迎来到 stm32_framework
  |_____  |  |   |  |       ||___    || ______| (本项目是“瞰百易”计划的一部分)
   _____| |  |   |  | ||_|| | ___|   || |_____ 
  |_______|  |___|  |_|   |_||_______||_______|
  _______  ______    _______  __   __  _______  _     _  _______  ______    ___   _ 
 |       ||    _ |  |   _   ||  |_|  ||       || | _ | ||       ||    _ |  |   | | |
 |    ___||   | ||  |  |_|  ||       ||    ___|| || || ||   _   ||   | ||  |   |_| |
 |   |___ |   |_||_ |       ||       ||   |___ |       ||  | |  ||   |_||_ |      _|
 |    ___||    __  ||       ||       ||    ___||       ||  |_|  ||    __  ||     |_ 
 |   |    |   |  | ||   _   || ||_|| ||   |___ |   _   ||       ||   |  | ||    _  |
 |___|    |___|  |_||__| |__||_|   |_||_______||__| |__||_______||___|  |_||___| |_|

一个志在实现STM32F1、F2和F4工程模板的项目,包含HAL库的高级封装、菜单库、有限状态机模板,集成了FreeRTOS、LWIP、FATFS、DSP、USB、IAP等等的组件,以及未来将加入的加密、BPNN、最小二乘、音频图片视频解码、LittlevGL等诸多常用的算法或组件,并具有良好的易用性、解耦性和可剪裁性!

那么就有小伙伴说了:“STM32这么简单,有啥玩的”,那么您玩出一个花儿来给我看看,Talk is cheap。

本项目的说明介绍等等部分遵循“二项玻”的第二则进行。

除了开源库之外的代码,每一行都经过手动移植、修改、检查和运行,是有灵魂的。

喜欢的话,点个小star鸭~


近期计划

这段时间比较忙学业,日常想法都放在了 “模板要添加的内容.txt” 里面。

理解了原理的东西,通用性低的东西,就不用时间去走一遍前人走过的路了,就酱

2021.6 最新留言:作者对目前的代码架构很不满意,已经打算在未知的未来进行 一部分大改和一部分直接重构,所以驱动写法可以看一看和复制粘贴,但是不推荐直接用工程本体,将来一定再改善到非常好。所以本项目暂时烂尾,见谅。

各个进展

下面三个看一看驱动就好

STM32F1xx

不是目前主要完善的对象,已经完成的大部分外设驱动并且调好

STM32F207IE

不是目前主要完善的对象,已经粗糙的完成的大部分外设驱动,有很多bugs

STM32F4xx

目前主要完善的对象,已经完成大部分外设驱动

计划外设和组件

(加粗体为暂时尚未实现的外设或者组件)

  • 不会支持的外设:LTDC LCD \ IRDA \ CRYP \ HASH

  • 暂时没有支持的组件:(暂时无限延期)

    线性回归算法库

    常用校验、加密算法(3DES、AES、RC6、TEA、RSA、MD5、SHA1、SHA256)

    Modbus 协议

    DCMI 和 IO 驱动 OV7725、OV2640 和 OV5650 摄像头

    音频编解码(MP3转PCM,外接一个功放直接播放)

    MQTT 协议(包含 cjson,LWIP 应用)

    JPEG、GIF 解码和BMP编解码

    LittlevGL

    NN(CMSIS 包中关于 NN 的内容,吸收进来)

    IAP(自实现)

  • 已经支持的外设:

    大部分HAL库外设驱动的高级封装( MCO \ RTC \ CRC \ TIM \ ADC \ DAC \ IWDG \ USART \ SPI \ WFI \ FLASH \ IAP \ IO \ SDIO \ DCMI \ FSMC \ DMA \ RNG \ DSP \ FPU \ USB \ CAN \ Ethernet)

  • 已经支持的组件:

    FreeRTOS 10.3.1

    LWIP 2.1.2(支持UDP、TCP Server和TCP Client 的RAW API,HTTP WebServer)

    FATFS ff14

    USB (ST UM1021)

    ARM CMSIS 5.7.0 DSP Lib

    fsm 有限状态机库(自实现)

    menu 菜单框架(自实现)

    内存管理(malloc 和 free)(自实现)

    软件模拟 I2C \ SPI 库(自实现)

    PID 库(自实现)

    工程添加下载到 RAM 执行的功能

    无依赖的 sprintf 库

    lwrb (软件 ringbuf,FIFO 缓冲)

组件和外设说明

(标为“缺省”的为暂未实现的,以后会加上- -,工作量好大的! )

  • 所有基础外设均在sys_config.h(F1)里或者PeriphConfigCore.h(F2和F4)里通过宏定义配置,每一个宏定义旁边均有使用说明的注释,有详细注释,不看不会用
  • 外设驱动代码分别在sys_config.c和periphconfig.c两个文件里,其所有的外设API声明均在sys.h里,所有的独立GPIO的API均在periphconfig.h里,用户程序调用外设控制API时,按需调用这两个文件即可
  • MCU外设配置的统一函数为void sys_MCU_Init_Seq(void),一般无需改动;外接器件初始化统一函数为void sys_Device_Init_Seq(void),需要自行按需修改
  • 本框架是正经的框架,有命名规范和应用规范的说明,在sys.h(F1)里或者PeriphConfigCore.h(F2和F4)里的上面
  • F4模板请看Docs手册文档,里面包含了所有已经支持的组件和外设的使用说明

是否启用OS

  • sys.h和FreeRTOSConfig.h里面的宏定义SYSTEM_SUPPORT_OS:是否开启FreeRTOS,不开为裸跑;具体应用逻辑编写和任务配置分别在TaskConfig.c和BareConfig.c里面

    FreeRTOS说明:所有API均罗列在TaskConfig.h里!关于FreeRTOS的信号量和事件标志组,均用任务通知替代!关于FreeRTOS的任务与任务、任务与中断间的通讯只用消息队列,功能最全!

组件

  • Menu 菜单框架:SYSTEM_SUPPORT_Menu:提供一个作者自己实现的实现菜单功能的模板;推荐作为标准常用,应用逻辑围绕这个菜单框架展开编写;具体文件在sys_menu.c里面;按照里面的注释,void keyProcess(void)函数负责扫描输入,void menuProcess(void)函数负责执行菜单功能,这两个函数必须放到一个循环里一直执行

  • fsm 有限状态机:提供一个作者自己实现的有限状态机(fsm),用于管理逻辑较为复杂的程序,帮助更好的写阅读性强的状态图实现,详细说明和具体用法在fsm.c和fsm.h文件内(推荐:sys_menu 用于管理输入(按键等)、输出(屏幕等)和系统参数的用户控制,fsm 用于管理 用状态图 描述的多状态、多条件的复杂逻辑任务)

  • string、sprintf库:SYSTEM_SUPPORT_MyString:提供一个实现了string.h大部分字符操作函数的库;具体作用看MyString.c文件里的注释

  • string、sprintf库:SYSTEM_SUPPORT_sprintf:提供一个无依赖的独立实现的sprint库,github开源库from:mpaland/printf;经过修改,可以实现对指定串口发送printf格式化的字符串

  • PID算法库:SYSTEM_SUPPORT_pid:提供一个作者自己实现的pid算法实现库,集成了积分分离和变限积分,以及可选的不完全微分和微分先行,具体用法看pid.h里面

  • 软件ringbuf,FIFO缓冲:由于应对大数据传输时,一个开源FIFO库

  • 内存管理(malloc和free):提供一个自实现的内存分配和释放函数,可用于内部RAM和外部RAM,参考了正点原子的“内存管理”章节的源代码

  • LittlevGL:暂时缺省

  • LWIP 2.1.2:(一个人精力有限,目前只有F4的模板比较完善,请注意!)在lwipopt.h里面进行配置,支持UDP、TCP Server、TCP Client,HTTP Server,

    详细使用说明请看“Docs.bin”里面的LWIP章节

  • FATFS ff14:SYSTEM_FATFS_ENABLE:已经支持SDIO SD卡,SPI SD卡,SPI FLASH和USB HOST MSC,详细使用说明请看“Docs.bin”里面的FATFS章节

  • USB (ST UM1021):详细使用说明请看“Docs.bin”里面的“STM32 USB库 使用”章节,里面介绍了USB Device的VCP、MSC和HID以及USB HOST的MSC和HID

  • IAP:详见这里

外设

(再次说明,具体使用方法看相应宏定义旁的注释,均在sys_config.h(F1)里或者PeriphConfigCore.h(F2和F4)里)

  • MCO:SYSTEM_MCO_PA8_OUT:设置PA8为MCO输出,默认时钟源为HSE
  • RTC:SYSTEM_RTC_ENABLE:配置使用RTC
  • CRC:SYSTEM_CRC_ENABLE:配置使用CRC循环冗余校验,外设初始化时进行一次硬件CRC32测试
  • RNG:SYSTEM_RNG_ENABLE:硬件32位真随机数生成器
  • TIM4:STSTEM_TIM4_ENABLE:模板基本功能,必须开启!使用通用定时器4,提供时基,默认10ms周期中断
  • TIM3:STSTEM_TIM3PWM_ENABLE:模板基本功能,必须开启!使用通用定时器3,默认不开启中断,提供四路PWM输出;引脚重映射、中断、频率、占空比均提供修改
  • TIM2:STSTEM_TIM2_ENABLE:通用定时器2,功能自定,初始化函数在PeriphCconfig.c里面定义;提供定时器中断、PWM、输入捕获和正交解码功能,用户按需自定
  • TIM1\8:STSTEM_TIM1/8_ENABLE:默认专门产生PWM,提供三路带死区(默认3us,可调)的互补PWM输出和一路PWM输出,引脚映射、频率、刹车、极性等均可按需调节
  • TIM6/7:STSTEM_TIM6/7_ENABLE仅用于实现定时器中断,提供一些同步和时基的工作,减轻TIM4的压力
  • ADC1:SYSTEM_ADC1_ENABLE:启否ADC1;提供添加规则组通道、是否连续扫描、是否使用DMA等可选功能;有详细注释
  • IWDG:SYSTEM_IWDG_ENABLE:开启独立看门狗,默认1S的喂狗周期,默认在TIM4定时中断里喂狗,用IWDG必开TIM4
  • USART:SYSTEM_UARTx_ENABLE:开启串口,x = 1、2和3;引脚重映射和波特率可选
  • SPI:SYSTEM_SPIx_ENABLE:开启SPI,x = 1和2;尽量只用其中一个,多个器件用多个SS使能端,不提供引脚重映射
  • WFI:SYSTEM_StdbyWKUP_ENABLE:使用待机-低功耗模式
  • FLASH:SYSTEM_FLASH_IAP_ENABLE:启用对内部FLASH储存空间编程
  • IO:GPIO相关的初始化、输入出和位带操作以及改变入出模式的调用口均在PeriphCconfig.c和PeriphCconfig.h里,有详细注释
  • DAC:SYSTEM_DAC_OUTx_ENABLE:大容量芯片系列外设,x=1~2
  • SDIO:SYSTEM_SDIO_SD_ENABLE:大容量芯片系列外设,底层API已经写入FATFS的底层,请用FATFS的API以文件方式操作
  • DMA:默认用于ADC1的多通道扫描模式DMA传送(如果开启SYSTEM_ADC1_useScan的话),另提供驱动代码的模板以供参考
  • FSMC:SYSTEM_FSMC_ENABLE:大容量芯片系列外设,可以用于外部SRAM或者LCD驱动,默认外部RAM用FSMC的块1区3,LCD用FSMC的块1区4,慎改动;就不支持各种FLASH了,MCU毕竟程序写不大,就算大了就用SPI的FLASH,也节约IO口。LCD的相关API说明在TFTLCD.h里面,字库也可剪裁
  • DSP\FPU:在F4模板中默认添加,可用直接调用相关API,详情看Docs手册文档的DSP专题
  • CAN:SYSTEM_CAN1_ENABLE:提供设置接收时只关心的帧类型和ID,提供收发API,收发可用设置帧类型和ID,STM32的CAN目前只有数据帧和遥控帧两种,每种都可以设置是标准标识符还是扩展标识符,CAN有关的学习记录和手册在Tips文件夹内,不熟悉的可用阅读,人话挺多的
  • Ethernet:看“LWIP组件”
  • DCMI:暂时没有计划去支持
  • USB:详细使用说明请看“Docs.bin”里面的“STM32 USB库 使用”章节,里面介绍了USB Device的VCP、MSC和HID以及USB HOST的MSC和HID

如果觉得好用,使用时还请别忘加上本仓库的地址哦:https://github.com/Staok/stm32_framework

Author : Staok
Email : [email protected]
Repo : https://github.com/Staok/stm32_framework
System is starting...
...
System init over!
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].