RT-Thread 4.x STM32F107

官方文檔很坑,新舊不分開,文檔缺失/分類很亂
有些文檔在IDE RT-STUDIO文檔裏,有些在RTThread標準版文檔裏,逆天

坑:不支持STM32CUBEMX的Advanced工程,記得重新保存生成basic工程才能用。不能使用.c/.h分離。

坑:適配CUBEMX工程的腳本要自己寫
image

driver/stm32f1xx_hal_conf_bak.h不一定會生成或替換。
cubemx/下的

  • Src/main.c: main()建議使用編譯器的__WEAK宏修飾
  • Inc/main.h: 註釋掉void Error_Handler(void);的聲明

image

寫好cubemx的rtt導入腳本,命名並放置爲 <工程工作目錄>/cubemx/SConscript


import os
from building import *

cwd = GetCurrentDir()
src  = Glob('Src/*.c')
# add cubemx drivers
src = Split('''
Src/stm32f1xx_hal_msp.c
Src/main.c
''')

path = [cwd]
path += [cwd + '/Inc']

group = DefineGroup('cubemx', src, depend = [''], CPPPATH = path)

Return('group')

SPI總線驅動/IDE文檔裏的:
基於 RT-Thread Studio 的 SPI 驅動開發文檔

SPI從設備驅動/RTT標準版文檔裏的:
坑,官方文檔裏 掛載從設備那篇不見了....
掛載 SPI 設備

SPI代碼片段

絕大部分開關都在 board.h 裏面,請按照官方說明或者頭文件裏的註釋打開 宏聲明 以開啓功能

初始化SPI從設備

設備註冊函數-掛載從設備DEV_DEVNAME到總線DEV_SPIBUS上(rtthread 4.x)

#define DEV_SPIBUS   "spi2"
#define DEV_DEVNAME  "spi20"//代表spi2下面的第0個設備

static int rt_hw_spi_yourdev_init()
{
    rt_err_t err;

    spi_dev = (struct rt_spi_device *) rt_malloc(sizeof(struct rt_spi_device));
    if (RT_NULL == spi_dev_)
    {
        rt_kprintf("Failed to malloc the spi device.");
        return -RT_ENOMEM;
    }

    err = rt_hw_spi_device_attach(DEV_SPIBUS, DEV_DEVNAME, GPIOC, GPIO_PIN_4);
    if (RT_EOK != err)
    {
        rt_kprintf("Failed to attach the spi device: ERRCODE=%d", err);
        return -RT_ERROR;
    }

    return RT_EOK;

}

/* 導出到自動初始化 */
INIT_COMPONENT_EXPORT(rt_hw_spi__init);

連接SPI從設備

    spi_dev = (struct rt_spi_device *) rt_device_find(name);
    if (!spi_dev)
    {
        rt_kprintf("[SPI] init run failed! can't find %s device!\n", name);
        return;
    }
    else
    {
        rt_spi_configure(spi_dev, &cfg);
    }

還可以用 INIT_APP_EXPORT 宏將上面連接SPI從設備的函數加入到RTT應用自啓
但注意不能是INIT_COMPONENT_EXPORT組件自動初始化,因爲這時候所需要的部分成員還沒初始化呢。

SPI發送

    //僅發送
    rt_spi_send(spi_dev, str, strcnt);
	//發送後接收n個字節
    rt_err_t err = rt_spi_send_then_recv(spi_dev, str, strcnt, recv_buf, n);

注:如果接收到的都是 0xFF,則說明設備沒工作,甚至沒上電。
由於SPI有四種採樣模式,如果採樣模式配置錯了,那麼採樣點不對會導致數據錯解。這個是因爲SPI沒有容錯機制,主從採樣並沒有協商或者通信機制導致的。

關於GIT

RT-Thread Studio是基於Eclipse開發的,對GIT的支持非常垃圾。
建議GIT管理和代碼編寫跳轉查看都用VSCode。代碼聯想和跳轉都只需要配好VSCode插件即可,這裏不再贅述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章