aranzeb
aranzeb

注册于 2 years ago

回答
1
文章
0
关注者
0

问题已经解决了。根本原因是Studio生成的项目里面没有drv_pulse_encoder.c文件。无论是Studio里v4.0.2还是latest版本均没有该文件。

解决步骤:

  1. 按照《RT-Thread Studio 结合 STM32CubeMx 开发其他驱动文档》,将CubeMx生成的HAL_TIM_Encoder_MspInit()函数复制到board.c中,并在board.h中添加#define BSP_USING_PULSE_ENCODER#define BSP_USING_PULSE_ENCODER4(依照需求指定),开启stm32xxxx_hal_config.h中的#define HAL_TIM_MODULE_ENABLED。——让人疑惑的是一般的设备驱动,在board.h中会给出操作步骤,如SPIADC之类的,但Pulse Encoder却没有。
  2. 下载rt-thread源代码(我下载的是master版),在bsp\stm32\libraries\HAL_Drivers路径下把drv_pulse_encoder.c复制到Studio生成项目的drivers目录下。
  3. **修改编译错误,在drv_pulse_encoder.c文件中添加pulse_encoder.h的绝对路径#include "rt-thread/components/drivers/include/drivers/pulse_encoder.h"。不太清楚是啥具体原因,必须要添加绝对路径,不然就会编译报错。
  4. 编译下载,程序能找到编码器设备,转动编码器,能正确的输出编码器码值。

PS: 我的板子的片子是STM32F429VG,Pulse Encoder使用的是TIM4的Encoder Mode,目前我的解决办法如上所示,可能会存在一些差异,需自行修改。

tyustli 发表于 2019-9-24 16:05
代码是最新的 master 吗?测试代码是你自己写的还是 应用指南的 sample


从github上更新了最新的can.c和drv_can.c。设备B能够正确的正确的收到帧数据,解析帧数据后,是设备A的ID:0x01,且为标准格式数据帧,数据也正常。
但是硬件过滤好像不起作用

还没想好 发表于 2018-11-5 09:17
1 malloc 出来的东西不会自动释放,需要手动释放
2 rt_thread_delete() 函数起到作用类似标记,真正的删除 ...


多谢解答

Cheney_Chen 发表于 2018-10-30 10:36
楼主你好,AT Socket 中创建的每个 Socket 都有独立的空间存放收发的数据,不同的 Socket 数据交互的时候有 ...


谢谢解答

发布
问题