目录
写在前面
在看这编之前要是不太懂可参考HMI-Board (rt-thread.org),本文章为在此基础上进行相应开发。
一、开发环境
rtthread studio版本2.2.6,并配置如下选项
切记tthread studio版本为2.2.6,否者会出现以下错误或其它错误,导致编译失败。
二、编译下载
串口uart4的硬件连接确定下:
GNG | GND |
P205 TX | RX |
P206 RX | TX |
结果:
LED0翻转和串口打印功能
结果展示
三、修改点灯案例
想修改点灯案例,实现以下效果
1.LED0为运行指示灯:闪烁周期执行亮500ms,灭500ms的周期;
2.LED0、LED1指示灯上电全部亮2秒后熄灭;
写法1
#include <rtthread.h>
#include "hal_data.h"
#include <rtdevice.h>
#include <stdlib.h>
#define LED_PIN BSP_IO_PORT_02_PIN_09 /* Onboard LED pins */
#define LED1_PIN BSP_IO_PORT_02_PIN_10
void hal_entry(void)
{
static int led_run_state = 0;
rt_pin_write(LED_PIN, PIN_LOW);
rt_pin_write(LED1_PIN, PIN_LOW);
static rt_tick_t init_led_tick = 0;
init_led_tick = rt_tick_get();
rt_kprintf("\nHello NJBL-BestWay!\n");
while (1)
{
if(abs(rt_tick_get() - init_led_tick) > 2*1000)
{
rt_pin_write(LED_PIN, PIN_HIGH);
rt_pin_write(LED1_PIN, PIN_HIGH);
led_run_state++;
}
if(led_run_state != 0)
{
rt_pin_write(LED_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
}
}
写法2
/* 线程 1 的入口函数 */
static void thread_led_flash_entry(void *parameter)
{
static uint32_t flash_cnt;
static rt_tick_t init_led_tick = 0;
init_led_tick = rt_tick_get();
rt_pin_write(USER1_PIN, PIN_LOW);
rt_pin_write(USER2_PIN, PIN_LOW);
while (1)
{
if (led_flash_state == 0) {
rt_pin_write(USER1_PIN, PIN_HIGH);
rt_pin_write(USER2_PIN, PIN_HIGH);
rt_thread_mdelay(500);
led_flash_state = 2;
}
else if (led_flash_state == 1 && (abs(rt_tick_get() - init_led_tick)> 5*1000)) {
//rt_pin_write(USER1_PIN, PIN_HIGH);
//rt_pin_write(USER2_PIN, PIN_HIGH);
led_flash_state = 0;
}
else if (led_flash_state == 2) {
if(flash_cnt<50)
{
rt_pin_write(USER1_PIN, PIN_HIGH);
rt_pin_write(USER2_PIN, PIN_LOW);
}
else if(flash_cnt<100)
{
rt_pin_write(USER1_PIN, PIN_LOW);
rt_pin_write(USER2_PIN, PIN_HIGH);
}
else {
flash_cnt = 0;
rt_kprintf("bnt down!\n");
}
flash_cnt ++;
}
rt_thread_mdelay(10);
}
}
注意,在瑞萨RA6M7中,LED0、LED1均为低电平有效,写法2支持按键操作。
四、UART遇到的错误及解决方法
问题出在这
串口4的回调函数在这里,用于处理串口中断
在hal_data.h中修改如下
在hal_data.c中修改如下
成功编译