【RT-Thread学习笔记】

RT-Thread 学习笔记

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
本文基于RTT官方参考文档记录本人RTT使用过程觉得有助于项目开发的一些理解。
硬件:
1.stm32f103c8t6最小系统板
2.st_link v2
3.CANalyst-Ⅱ
软件:
1.RT-Thread Studio
2.USB_CAN Tool


提示:以下是本篇文章正文内容,下面案例可供参考

一、新建工程要做的事

1.时钟相关

在board.h中修改时钟配置

/*-------------------------- CLOCK CONFIG BEGIN --------------------------*/

#define BSP_CLOCK_SOURCE                  ("HSE")
#define BSP_CLOCK_SOURCE_FREQ_MHZ         ((int32_t)8)
#define BSP_CLOCK_SYSTEM_FREQ_MHZ         ((int32_t)72)

/*-------------------------- CLOCK CONFIG END --------------------------*/

在drv_clk.c中修改时钟配置

void system_clock_config(int target_freq_Mhz)
{
      RCC_OscInitTypeDef RCC_OscInitStruct = {0};
      RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

      /** Initializes the RCC Oscillators according to the specified parameters
      * in the RCC_OscInitTypeDef structure.
      */
      RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
      RCC_OscInitStruct.HSEState = RCC_HSE_ON;
      RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
      RCC_OscInitStruct.HSIState = RCC_HSI_ON;
      RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
      RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
      RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
      if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
      {
        Error_Handler();
      }

      /** Initializes the CPU, AHB and APB buses clocks
      */
      RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                  |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
      RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
      RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
      RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
      RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

      if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
      {
        Error_Handler();
      }
}

2 .打开设备驱动的三个开关

由顶层到底层有三个配置文件控制着设备驱动代码是否参与编译,通过里面的宏定义修改配置
1.rtconfig.h
在这里插入图片描述

在studio中由RT_Thread Setting 配置,在设备层面控制着设备驱动框架层的代码文件如can.c/h。
2.board.h
决定设备驱动层的代码如drv_can.c/h是否参加编译,注意该层文件需要从\RT-ThreadStudio\repo\Extract\RT-Thread_Source_Code\RT-Thread\5.0.2\bsp\stm32\libraries\HAL_Drivers手动添加到工程中
在这里插入图片描述

3.stm32f1xx_hal_conf.h
决定hal库中该设备相对应的代码是否参加编译。
在这里插入图片描述

二、设备驱动(以CAN设备的写操作为例)

使用设备前要先填写void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan)函数初始化引脚和外设时钟,这一步的代码可由cubemx生成,该函数名已在hal库的初始化列表中,启动自动执行。

C语言中用结构体来定义类
在这里插入图片描述

设备驱动层 驱动框架层 设备管理层 APP 创建stm32_can设备 实现驱动层的设备操作方法_can_ops 注册rt_can_device设备 实现框架层的设备操作方法rt_can_write等 rt_can_write _can_sendmsg 注册rt_device设备 rt_device_write 设备驱动层 驱动框架层 设备管理层 APP

以上各类系继承关系,通过共用一个rt_object父类地址联系起来,在rt_can_write函数中通过can = (struct rt_can_device *)dev;以使用驱动层的设备操作方法_can_ops._can_sendmsg。
特别的是最子类stm32_can在注册rt_device设备时传给了device->user_data,在_can_sendmsg函数中通过hcan = &((struct stm32_can *) can->parent.user_data)->CanHandle;把要使用的can设备句柄拿出来,

三、CAN通信控制伺服电机

1.过滤表设置

2.过滤表设置

总结

1.开发快速查表

初始化接口

提示:这里对文章进行总结:

未完///

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值