先入门RT-Thread Studio 参考
比较常用的
项目编译碰到一些奇怪问题,可以清理一下再全部构建试一下
常用的快捷键,鼠标放到在某个函数上点一下,按F3进入函数体内,或者按住ctrl点击函数;Alt+左键,返回上一级;ctrl+H进行搜索;ctrl+/进行注释,再点一次取消注释
关于串口的dma,下面这么写,串口2是没问题的,串口4会报错
'UART4_RX_DMA_INSTANCE' undeclared (first use in this function) uart_config.h /TEST_L476RCT6_RTTSDIO/drivers/include/config 第 174 行 C/C++ 问题··· 原因可以去dma_config.h里面看一下,因为里面没有为串口4的接收分配DMA通道
#define BSP_UART4_RX_USING_DMA
#define BSP_UART2_RX_USING_DMA
#define BSP_USING_UART2
#define BSP_UART2_TX_PIN "PA2"
#define BSP_UART2_RX_PIN "PA3"
#define BSP_USING_UART4
#define BSP_UART4_TX_PIN "PC10"
#define BSP_UART4_RX_PIN "PC11"
studio自带的串口工具只能显示字符串,不能显示hex
和裸板不同的是,RT系统有一种自动初始化机制,就是函数不一定用放到main函数里面去初始化,一个宏就解决,参考 官方
移植软件包dhtxx时发现RT_SENSOR_VENDOR_ASAIR一直未定义,定位到下图只是在报错时把这个传感器是谁家卖的打印出来,不太重要就自己定义了 #define RT_SENSOR_VENDOR_ASAIR RT_SENSOR_VENDOR_UNKNOWN
还报错描述 资源 路径 位置 类型
conflicting types for 'rt_hw_dht_init' sensor_asair_dhtxx.c /TEST_L476RCT6_RTTSDIO/packages/dhtxx-latest/src 第 389 行 C/C++ 问题
出现错误:
\ | /
- RT - Thread Operating System
/ | \ 4.0.2 build Jan 13 2021
2006 - 2019 Copyright by rt-thread team
psr: 0xa1000000
r00: 0x20001718
r01: 0x00000100
r02: 0x00000000
r03: 0xdeadbeef
r04: 0xdeadbeef
r05: 0xdeadbeef
r06: 0xdeadbeef
r07: 0x20005a10
r08: 0xdeadbeef
r09: 0xdeadbeef
r10: 0xdeadbeef
r11: 0xdeadbeef
r12: 0x00000000
lr: 0x08000999
pc: 0xdeadbeee
hard fault on thread: main thread pri status sp stack size max used left tick error
-------- --- ------- ---------- ---------- ------ ---------- ---
nh3_data 25 ready 0x00000048 0x00000200 14% 0x0000000a 000
tled 31 ready 0x00000048 0x00000010 100% 0x00000005 000
tshell 20 ready 0x00000048 0x00001000 01% 0x0000000a 000
tidle0 31 ready 0x00000044 0x00000100 26% 0x00000020 000
timer 4 suspend 0x0000007c 0x00000200 24% 0x00000009 000
main 10 running 0x00000044 0x00004000 01% 0x00000014 000
mem manage fault:
SCB_CFSR_MFSR:0x01 IACCVIOL
问题原因是线程堆栈溢出
psr: 0x01000000
r00: 0xdeadbeef
r01: 0x10000000
r02: 0x2000221c
r03: 0xdeadbeef
r04: 0x00000000
r05: 0x00000058
r06: 0x00000000
r07: 0x20004b80
r08: 0x20004ba8
r09: 0xdeadbeef
r10: 0xdeadbeef
r11: 0xdeadbeef
r12: 0x00000000
lr: 0x0801f51d
pc: 0x0800e49a
hard fault on thread: hln_th
thread pri status sp stack size max used left tick error
-------- --- ------- ---------- ---------- ------ ---------- ---
beep 27 ready 0x00000048 0x00000100 28% 0x0000000a 000
led_0 31 suspend 0x000000d8 0x00000200 42% 0x00000005 000
cfg_th 17 suspend 0x000000b0 0x00000400 28% 0x00000031 000
led_th 30 suspend 0x000000b8 0x00000400 25% 0x00000032 000
tst_th 26 suspend 0x000000c8 0x00000100 78% 0x0000000a 000
ZIG_th 22 suspend 0x000000c8 0x00000200 39% 0x0000000a 000
bla_th 25 suspend 0x000000d0 0x00000400 20% 0x0000000a 000
hln_th 22 running 0x00000110 0x00000600 17% 0x00000007 -02
littled 27 suspend 0x000000e8 0x00000400 31% 0x00000014 000
tshell 20 suspend 0x000000cc 0x00001000 05% 0x0000000a 000
tidle0 31 ready 0x0000005c 0x00000100 57% 0x0000001e 000
timer 4 suspend 0x0000007c 0x00000200 24% 0x00000009 000
main 10 suspend 0x00000178 0x00000800 27% 0x0000000e 000
bus fault:
SCB_CFSR_BFSR:0x82 PRECISERR SCB->BFAR:DEADBEEF
问题解决:在串口回调的一个子函数最后面放了一个return 1 ,而这个子函数调用了一个线程,线程调用了一个串口发送函数,在在串口回调的一个子函数后面也调用了同样一个串口发送函数,不知道是不是时间太近造成的,把return去了就行了
修改串口波特率
呼吸灯pwm 先使能RT_USING_PWM 再去board.h里面定义PWM几 比如#define BSP_USING_PWM2
定时器要#define BSP_USING_TIM 没有找到取消定义的地方,要自己定义 然后去board.h里面参考HARDWARE TIMER CONFIG BEGIN里面内容
再在 tim_config.h 中 添加或修改 TIM2、TIM4的配置
配置PWM要去pwm_config.h 配置PWM2_CONFIG的定时器 通道 名称
pwm配置参考 参考2 如果不把移植过来的函数放到board.c中要声明
注意
定时器初始化MX_TIM2_Init();要放在引脚配置rt_pin_mode(LED_CTR1, PIN_MODE_OUTPUT);之后
线程出现error=-2的意思是线程超时