目录
线下集结
新建RTT项目
基于芯片新建工程
运行RTT程序
在线仿真问题
几个基于芯片生产程序实例
LED灯闪烁
按键
morse(摩斯密码)
总结和感受
线下集结
本人有幸参与了本次训练营的线下学习,线下学习的氛围让我充分感受到了学习的乐趣。和其他同学一起学习交流,大家之前的项目经验和遇到的问题都能够现场解答和讨论,这种现场的氛围不存在线上学习。特别是项目实操环节,能够现场观摩学习其他人的开发环境和编程习惯,这一点对我来说收获很大。
线下的学习过程过于,以下是针对这次的线下复习
新建RTT项目
因手里没有现场的STM32F411的开发板,手里有套野火霸道STM32F103ZE的开发板,后续内容基于此开发板完成。
如何搭建环境,参考本次培训的官方文档:
/joyce/train-note
我这里多安装了STM32F1的包:
基于芯片新建工程
因没有相应的开发板支持包,新建项目基于芯片:
注意这里新建之后,芯片时钟都是以内部晶振为基准,如果要修改也比较简单,找到drivers下的board.h修改即可,如我板载是8MHz晶振,F103最大支持72Mhz内核频率,配置如下:
#define BSP_CLOCK_SOURCE ("HSE")#define BSP_CLOCK_SOURCE_FREQ_MHZ ((int32_t)8)#define BSP_CLOCK_SYSTEM_FREQ_MHZ ((int32_t)72)
运行RTT程序
配置完后点击下载,链接串口,可打开终端:
在线仿真问题
如果需要在线用ST-LINK仿真,遇到不能进入仿真的报错,则可以用以下程序将ST-LINK固件进行升级:
几个基于芯片生产程序实例
LED灯闪烁
LED硬件原理图如下:
修改main.c内程序如下:
#define DBG_TAG "main"#define DBG_LVL DBG_LOG#include <rtdbg.h>#include <rtdevice.h>#include <drivers\pin.h>#include <drivers\include\drv_common.h>#define LED_PIN GET_PIN(F,7)int main(void){int count = 1;rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);while (count++){LOG_D("Hello RT-Thread!");rt_pin_write(LED_PIN, 0);rt_thread_mdelay(1000);rt_pin_write(LED_PIN, 1);rt_thread_mdelay(1000);}return RT_EOK;}
按键
按键原理图如下:
在applition里新建key.c
#include <rtthread.h>#include <rtdevice.h>#include <drivers\pin.h>#include <drivers\include\drv_common.h>#define KEY_PIN GET_PIN(A,0)#define LED2_PIN GET_PIN(F,8)int key_irq_count = 0;void key_irq(){//按下触发,控制LED2亮灭key_irq_count++;rt_pin_write(LED2_PIN, key_irq_count&0x01);}int key(){rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT);rt_pin_mode(KEY_PIN, PIN_MODE_INPUT_PULLDOWN);rt_pin_write(LED2_PIN, PIN_LOW);//注册中断rt_pin_attach_irq(KEY_PIN, PIN_IRQ_MODE_RISING, key_irq, RT_NULL);//使能中断rt_pin_irq_enable(KEY_PIN, PIN_IRQ_ENABLE);return 1;}/*注册自动初始化key*/INIT_BOARD_EXPORT(key);
注意最后的初始化,不像以前的裸板驱动,这里更加模块化,自动初始化机制的几个API介绍:
想要更详细了解机制,可以戳链接,跳转官方文档。
morse(摩斯密码)
使用rtt较为方便的一点是可以方便的添加其他人写好的模块:
1、添加软件包
2、配置
3、保存并进行适配性的修改
//修改按键IO口#define USER_KEY GET_PIN(C, 13) // GET_PIN(H,4)void irq_callback(){morse_input(!rt_pin_read(USER_KEY));// rt_kprintf("key_irq\r\n");}int morse_key_example(void){rt_pin_mode(USER_KEY, PIN_MODE_INPUT_PULLDOWN);rt_pin_attach_irq(USER_KEY, PIN_IRQ_MODE_RISING_FALLING, irq_callback, RT_NULL);rt_pin_irq_enable(USER_KEY, PIN_IRQ_ENABLE);//增加输出,查看示例是否已调用rt_kprintf("key_example\r\n");return 0;}
4、编译下载运行
5、结果
初始化运行结果:
按照相应的摩斯密码来点击按键输出字符到终端(morse相关说明GitHub - zhkag/morse: morse):
总结和感受
RTT的RT-Thread Studio 一战式的IDE给我极大的震撼,与我之前长期使用Free-RTos对比起来看,RTT的生态真的是太强大了,以本次为契机,后续项目上会优先考虑RTT,真的能节省时间和精力。真诚感谢主办方!下次有机会再相聚!