RT-Thread 5.0.2 踩坑记录(一)新建工程、配置控制台串口

新建一个RT-Thread项目,版本选择了最新的5.0.2,我自己的板子的MCU是STM32F407IG,串口控制台就用默认的UART1

尝试第一次编译,报了3个错误

发现是board.c的RT_WEAK未定义

打开RT-Thead Settings里的旧版本兼容性支持

再次尝试编译,编译通过,有6个警告,暂时不管

接下来用CubeMX来配置一下单片机时钟和引脚定义,在此之前,先查看一下RT-Thread 5.0.2用的HAL库版本是多少,我的方法是查看HAL_Drvier的README.md,F4用的是v1.26.2

然后打开CubeMX Settings,提示让你选择本地的STM32CubeMX.exe,找到自己对应的安装位置就好了

为了防止出现兼容性问题,我这边不使用st最新版本的firmware,采用和RT Thread 5.0.2相同版本的v1.26.2。取消勾选Use Default Firmware Location,手动选择Firmware路径

如果你安装的是最新的STM32CubeMX,不带有旧版的firmware,可以在这里自行下载所需版本的firmware

勾选为每个外设生成对应的.c和.h文件

回到引脚定义界面,配置一下调试接口和串口

配置时钟,我用的是24M的外部晶振

暂时先配置到这里,生成工程代码编译下看看。直接编译通过了

启用串口终端,运行一下代码看看

看来没什么问题,控制台已经可以使用了

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在 `sdkconfig` 文件中启用 SPI 驱动程序。找到以下行并取消注释: ``` CONFIG_ESP32C3_SPI ``` 然后,需要通过 `spi_bus_initialize()` 函数初始化 SPI 总线。可以使用以下代码: ```c spi_bus_config_t bus_cfg = { .miso_io_num = PIN_NUM_MISO, .mosi_io_num = PIN_NUM_MOSI, .sclk_io_num = PIN_NUM_CLK, .quadwp_io_num = -1, .quadhd_io_num = -1, .max_transfer_sz = 0, }; spi_bus_initialize(VSPI_HOST, &bus_cfg, DMA_CHAN); ``` 其中,`PIN_NUM_MISO`,`PIN_NUM_MOSI`,和 `PIN_NUM_CLK` 是 MISO,MOSI 和 SCLK 的引脚号,`DMA_CHAN` 是 DMA 通道的编号,可以设置为 1。 接下来,需要通过 `spi_device_interface_config_t` 结构体配置 SPI 设备。可以使用以下代码: ```c spi_device_interface_config_t dev_cfg = { .command_bits = 0, .address_bits = 0, .dummy_bits = 0, .mode = 0, .duty_cycle_pos = 0, .cs_ena_pretrans = 0, .cs_ena_posttrans = 0, .clock_speed_hz = 1000000, .input_delay_ns = 0, .spics_io_num = PIN_NUM_CS, .flags = 0, .queue_size = 1, .pre_cb = NULL, .post_cb = NULL, }; spi_device_handle_t spi_handle; spi_bus_add_device(VSPI_HOST, &dev_cfg, &spi_handle); ``` 其中,`PIN_NUM_CS` 是片选引脚的引脚号,可以设置为任何 GPIO 引脚。 现在,可以使用 `spi_device_transmit()` 函数来传输数据。例如,要写入一个字节,可以使用以下代码: ```c uint8_t data = 0xAB; spi_transaction_t tx = { .length = 8, .tx_buffer = &data, }; spi_device_transmit(spi_handle, &tx); ``` 要读取一个字节,可以使用以下代码: ```c uint8_t data = 0; spi_transaction_t tx = { .length = 8, .rx_buffer = &data, }; spi_device_transmit(spi_handle, &tx); ``` 注意,在 `spi_transaction_t` 结构体中,如果 `tx_buffer` 不为 `NULL`,则将执行写操作;如果 `rx_buffer` 不为 `NULL`,则将执行读操作;如果两者都不为 `NULL`,则将执行读写操作。 需要注意的是,在使用 SPI 设备之前,必须对 SPI 总线进行初始化,并且在完成传输之后,必须调用 `spi_bus_remove_device()` 函数来删除设备。代码示例如下: ```c spi_bus_initialize(VSPI_HOST, &bus_cfg, DMA_CHAN); spi_device_interface_config_t dev_cfg = {...}; spi_device_handle_t spi_handle; spi_bus_add_device(VSPI_HOST, &dev_cfg, &spi_handle); uint8_t data = 0xAB; spi_transaction_t tx = {...}; spi_device_transmit(spi_handle, &tx); spi_bus_remove_device(spi_handle); spi_bus_free(VSPI_HOST); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值