当我们进入嵌入式这个领域的时候,往往首先接触的都是单片机编程,单片机编程又 首选 51 单片机来入门。
这里面说的单片机编程通常都是指裸机编程,即不加入任何 RTOS (Real Time Operating System 实时操作系统)的程序。
常用的 RTOS 有国外的FreeRTOS、 μC/OS、RTX 和国内的 FreeRTOS、Huawei LiteOS 和 AliOS-Things 等,
其中尤以国外开源 且免费的 FreeRTOS 的市场占有率最高。
在裸机系统中,所有的程序基本都是自己写的,所有的操作都是在一个无限的大循环 里面实现。
现实生活中的很多中小型的电子产品用的都是裸机系统,而且也能够满足需求。 但是为什么还要学习 RTOS 编程,
偏偏还要整个操作系统进来。一是项目需要,随着产品 要实现的功能越来越多,单纯的裸机系统已经不能够完美地解决问题,
反而会使编程变得 更加复杂,如果想降低编程的难度,我们可以考虑引入 RTOS 实现多任务管理,这是使用 RTOS 的最大优势。
二是学习的需要,必须学习更高级的东西,实现更好的职业规划,为将来走向人生巅峰迎娶白富美做准备,
而不是一味的在裸机编程上面死磕。作为一个合格 的嵌入式软件工程师,学习是永远不能停歇的事,时刻都得为将来准备。
书到用时方恨少, 我希望机会来临时你不要有这种感觉。
抱着学习FreeRTOS的心态,这次的DIY项目全部在FreeRTOS上完成
CubeMX配置
这里使用官方板卡的默认配置,已经为我们配置好了时钟。
如图配置我们需要的外设
在freertos这里全部保持默认,并新增两个任务用于oled显示和ina219采集,新增一个队列用于传递数据。
可以看到我们的任务和队列自动配置好了。
1.实现1s翻转LED
可以看到使用freertos根本不需要自己计算频率配置定时器并在中断中编写程序,直接delay就行,freertos的心跳定时器会自动1ms执行一次,并且可以把任务处理交给freertos。
2.实现OLED屏幕显示信息
略微修改得捷提供的oled库,使用硬件iic
在任务2中调用oled显示函数
可以看到正常进行了显示。
要记住在main函数前调用初始化函数哦。