瑞萨RA6M3开发实践-UART实践-亲测有效 ||重写 LED点灯案例及过程中遇到的问题

目录

一、开发环境

二、编译下载

三、修改点灯案例

写法1

写法2

四、UART遇到的错误及解决方法

五、开启串口uart4的打印结果


写在前面

在看这编之前要是不太懂可参考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中修改如下

成功编译

五、开启串口uart4的打印结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值