最近在建立一个以方便移植为目的的各类外设的通用库。
github地址:https://github.com/ActivePeter/pa_CommonLibTest
demo项目汇总:pa-CommonLib-demos (github.com)
1.fork这个项目。
2.建立一个你的单片机项目。(由于是一个层级结构的目录。所以它不支持keil,可以使用ccs,cubeide,gcc等编译工具)
3.将你的单片机项目变为仓库
4.使用指令将此库作为子模块加入你的单片机项目仓库
git submodule add https://github.com/ActivePeter/pa_CommonLib.git(这个路径可以换成你fork后的路径)
每一种外设都有分层。逻辑和驱动分开。
驱动层函数。使用宏定义来分别指定不同板子的型号。
c/c++
一个简易设备树,用于裁剪外设。目前没有适配全。需要放入到直接被include的目录下
c写法。固定外设
c写法。固定外设。一些外设比较多的后期考虑加入速度切换选项
最常用的一些函数:
pa_millis(系统运行时。毫秒
void pa_CommonInit(); (通用外设的启动。
void pa_delayMs(unsigned int ms); (毫秒延时。有rtos就直接用rtos的延时
void pa_delayUs(unsigned int us); (一般用不到
void pa_setTimerCallback(void (*CallBack_100us)(void), void (*CallBack_1ms)(void));
(设置定时器应用层回调函数。一些需要高频稳定调用的
void pa_Debug(const char *data); (串口调试,stm32使用 cdc
void pa_Debug_len(const char *data, int len) (
c写法。放在pa_PWM 的 namespace内
typedef enum { Protocal_SPI = 1, Protocal_IIC } Protocal; typedef enum { GpioInputMode_pullup = 1, GpioInputMode_pulldown, GpioInputMode_hang, } GpioInputMode; typedef enum { GpioPortOrPin_Port = 1, GpioPortOrPin_Pin, } GpioPortOrPin; typedef enum { Direction_Increase = 1, Direction_Decrease, } Direction;
pa_snprintf, 对于freertos的gcc 32比较友好
目前没多少东西
extern "C" { #include "math.h" } #ifndef PI #define PI 3.1415926535898 #endif #ifndef PI_3 #define PI_3 1.0471975511965 #endif #ifndef PI_2_3 #define PI_2_3 2.09439510239319549 #endif
}