【内核学习营】+邱永利+使用串口驱动LED灯

发表在 内核学习营2018-9-19 18:15 [复制链接] 4 898

本帖最后由 qiu257158 于 2018-9-19 18:15 编辑 8 ]( B8 I2 L, Z$ u

6 o4 |# O, I: Y
开发工具:ST官网开发板,MCU型号:STM32F410ERT6。
软件品台:env_released_1.0.0 ,mdk5.25
主要代码:
uart.c
#include <rthw.h>
#include <rtthread.h>
#include <drivers/pin.h>

  ]4 t6 ?- f& H6 c
static rt_device_t uart_device = RT_NULL;
static rt_err_t uart_intput(rt_device_t dev, rt_size_t size)
{
    /* ·¢ËÍʼþ */
    //rt_event_send(&event, UART_RX_EVENT);
    rt_uint8_t ch;
               
          if(size == 1)
                        {
       
                rt_device_read(uart_device, 0, &ch, 1);
               
          if(ch == 0xAA)
                {
                        rt_pin_write(21, 1);
                        rt_device_write(uart_device, 0, &ch, 1);
                }
                 
                if(ch == 0x55)
                {
                        rt_pin_write(21, 0);
                  rt_device_write(uart_device, 0, &ch, 1);
                }
                ch = 0;
                }
    return RT_EOK;
}
int uart_init(void)
{
                uart_device = rt_device_find("uart2");   
                rt_device_set_rx_indicate(uart_device, uart_intput);
                rt_device_open(uart_device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX );
                return 0;
}

& w4 `4 E- K( N& C
INIT_APP_EXPORT(uart_init);

( a, S0 \7 z' f( O
LED.c
#include "LED.h"

& I. x' T- n' n- B
int Function_RunLED(void)
{
        //GPIO_Config£º
        rt_base_t Run_LED = 21;                  
        rt_pin_mode(Run_LED,PIN_MODE_OUTPUT);     
               

" U" Q# t: H+ Z5 D( E) n! ~
   return 0;
}
# I* n. U) f4 n
INIT_APP_EXPORT(Function_RunLED);

# P1 P) J( \2 P+ @- r( h

3 ]% s2 K3 q  ?6 u5 K
由于板子只有一路串口uart2,需要在env配置把shell关闭;具体操作可以看官方文档。

8 H: g' B4 G1 y" x- L, o
发送OXAA,点亮LED灯,并向主机发回数据。
在过程一直无法理解串口的回调函数。我的理解是:当有有数据接收时,串口中断函数会调用回调函数,使应用程序知道有数据接收。
   
9 b, `; x" U" U, ~
1537351790(1).png
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2018-9-28 10:51:37 | 显示全部楼层
如果   uart_device = rt_device_find("uart2");      我要打开多个串口,怎么做呢
使用道具 举报 回复
发表于 2019-1-5 17:24:17 | 显示全部楼层
你好,你这个程序可以成功控制LED灯吗,怎么我的没有反应,能否共享下你的完整实例,谢谢!!
使用道具 举报 回复
发表于 2019-1-11 15:07:50 | 显示全部楼层
w1019564793 发表于 2018-9-28 10:510 A4 @1 ?2 l& r
如果   uart_device = rt_device_find("uart2");      我要打开多个串口,怎么做呢
: G2 ?0 Y1 A$ h- N5 g
找到使用多个串口的方法没有?
使用道具 举报 回复
发表于 2019-3-3 17:24:25 | 显示全部楼层
w1019564793 发表于 2018-9-28 10:51
6 T" X# y% a5 D% B% m" t; K$ l) }如果   uart_device = rt_device_find("uart2");      我要打开多个串口,怎么做呢

' S; i! I4 w0 r( D如果已经添加了多个串口就rt_device_find("其他串口");,它的返回值就可以操作其他串口
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区  

© 2013-2017 上海睿赛德电子科技有限公司 沪ICP备13014002号-1

Powered by RT-Thread

快速回复 返回顶部 返回列表