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

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

本帖最后由 qiu257158 于 2018-9-19 18:15 编辑 ) a  Z# F* {3 s, }

+ T* h5 m4 U1 [1 Q
开发工具:ST官网开发板,MCU型号:STM32F410ERT6。
软件品台:env_released_1.0.0 ,mdk5.25
主要代码:
uart.c
#include <rthw.h>
#include <rtthread.h>
#include <drivers/pin.h>

4 l2 z; y* B, u4 I. ^
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;
}
7 A6 L7 b# m; U5 b4 ^5 ~! n; k0 g/ O
INIT_APP_EXPORT(uart_init);

- V6 X( ^; X  r3 A2 \  O; ^9 `
LED.c
#include "LED.h"
0 m1 P! f5 ?9 Q% E
int Function_RunLED(void)
{
        //GPIO_Config£º
        rt_base_t Run_LED = 21;                  
        rt_pin_mode(Run_LED,PIN_MODE_OUTPUT);     
               

8 Z) |  K, M  `5 m
   return 0;
}
6 ?$ F* D( I( e5 S
INIT_APP_EXPORT(Function_RunLED);

* I8 T7 s. b$ Q6 U4 O' S

$ d1 \: a  `( R1 v$ t
由于板子只有一路串口uart2,需要在env配置把shell关闭;具体操作可以看官方文档。

# {% u5 I( @) c" O4 v
发送OXAA,点亮LED灯,并向主机发回数据。
在过程一直无法理解串口的回调函数。我的理解是:当有有数据接收时,串口中断函数会调用回调函数,使应用程序知道有数据接收。
   

' m$ j9 k6 Q$ `1 t! G; z% u
1537351790(1).png
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2018-9-28 10:51:37 | 显示全部楼层
如果   uart_device = rt_device_find("uart2");      我要打开多个串口,怎么做呢
使用道具 举报 回复
发表于 2019-1-5 17:24:17 | 显示全部楼层
你好,你这个程序可以成功控制LED灯吗,怎么我的没有反应,能否共享下你的完整实例,谢谢!!
使用道具 举报 回复
发表于 7 天前 | 显示全部楼层
w1019564793 发表于 2018-9-28 10:51# P5 |% G) x0 I- A
如果   uart_device = rt_device_find("uart2");      我要打开多个串口,怎么做呢
5 _2 f- _$ e; @  i& u" ^
找到使用多个串口的方法没有?
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by RT-Thread

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