1. 建立工程模板
- 建相关文件 夹, 添加库文件
- 配置系统宏定义和头文件包含路径
- mdk 软件配置
2. 配置系统时钟
系统时钟是整个系统运行的三要素之一(还有电源、复位),
这里主要配置 分频系数M、P 倍频系数 N
3. 测试系统时钟
配置完系统时钟,还要验证一下时钟是否是我们所期望的,这里提供几种方法,仅供参考:
- 查看变量 SystmeCoreClock 的值
- 通过硬件仿真查看
内部时钟存在偏差,可通过修改校准寄存器的值修正,以下是修正前后从mco时钟输出引脚测得的内部高速时钟频率
修正前:
修正后:
4. 配置系统打印调试串口
嵌入式平台由于资源的限制,一般没有显示设备,所以通常通过串口调进行调试
5. 看门狗
- 在后台主循环里加入 喂狗操作,可防止程序死循环,因得不到及时喂狗,导致程序复位
- 在中断里加入喂狗操作(喂狗间隔时间一定要长于主循环里的喂狗时间),防止中断意外关闭
6. RTC
RTC可以为系统提供时间信息, 定时中断(唤醒)
7. GPIO 口操作
GPIO 操作流程:
1) 打开外设端口时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
2) 填充 GPIO_Init_TypeDef 结构体
3) 调用Gpio_Init() 配置端口
注意 :调用Gpio_Init() 函数之前必须先打开外设端口时钟
8. 定时器
- 定时器实现精确定时
- 脉冲计数
- pwm脉冲
9. 中断
中断是前后台系统运行的关键, 可提高程序的响应能力
中断编写注意事项:
10. I2C
I2C是系统重要的内部总线,用于连接mcu和片上其他外设,只需2根线即可实现数据通讯
11. SPI
SPI是高速的内部总线
12. 搭建系统框架
裸机程序规模增大之后,如果不搭建一个合适的系统框架,系统维护和扩展将会是一件棘手的工作,
常见的系统框架如下:
1)时间片轮询系统
2)基于消息轮询的系统
3)转态机
13. 面向对象的思想编程
用结构体实现封装
结构体成员变量表示属性
结构体 函数指针 成员变量表示方法
14. 面向接口的编程
面向接口的编程有如下优点:
- 高内聚,低耦合
- 提高系统的可扩展性和可维护性
- 为实现分层提供了有力的保障