Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
BSP
智能小车_平衡车
无刷电机小车开发记录02——BSP导入RTThreadStudio
发布于 2023-06-17 18:44:26 浏览:825
订阅该版
[tocm] # 前情提要 上一篇文章记录了一下如何创建GD32E503的BSP。但由于时间关系只实现了MDK版本的工程模板,后面如果需要提交BSP时再去补全IAR版本的。但对于我个人而言,IAR只在读书时玩蓝牙开发的时候用过,而MDK虽然用的比较多但最近几年也很少用了。感觉还是VSCode等编辑器用起来更舒服一些,而对于RTT系统的开发,我个人还是更倾向于使用官方的RTThreadStudioIDE进行开发。于是今天想想办法怎么移到RTTStudio上去。 # 面临的问题 1. 上篇文章已经发现,目前官方的固件库竟然没有GCC版本的启动文件,所以要想办法弄个启动文件 2. RTTStudio自带的GCC编译器版本太老,不支持编译M33内核,所以要升级GCC 3. 计划用开源的DAP调试器进行调试,但同样RTTStudio自带的pyocd调试工具版本太老,需要升级 # 添加GCC版本的启动文件 ## 拷贝启动文件模板 从GD32F4xx固件包内把GCC文件夹拷贝到新添加的GDE50x固件包的对应位置,并把汇编文件名称修改为gd32e50x的,注意,GD32E50x分了高密度版(hd)和互联版(cl),我这里暂且只修改了一份我用到的高密度版本的。cl版本的也类似修改即可。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/58523917b27465fc28c31fbf5439c17c.png) ## 修改启动文件 众所周知,汇编的启动文件要干的事情就是做一些芯片启动的前期初始化工作,搭建C代码的运行环境。所以这里也并不需要对照汇编指令,把每条语句的功能都搞明白,只需大致了解一下即可。一眼望去,感觉这个汇编文件主要做了三大事情。 第一,定义中断向量; 第二,定义启动入口; 第三,声明中断函数。 而启动入口相关的不用修改,都是先调用SystemInit函数做一些时钟等基础初始化,然后再调用entry或者main函数执行后续的代码。 所以这里主要修改的就是中断向量的定义和中断函数的声明,按照armcc版本的进行修改即可: ``` ;/* ; * Copyright (c) 2006-2021, RT-Thread Development Team ; * ; * SPDX-License-Identifier: Apache-2.0 ; * ; * Change Logs: ; * Date Author Notes ; * 2018-05-22 tanek first implementation ; */ .syntax unified .cpu cortex-m33 .fpu softvfp .thumb .global g_pfnVectors .global Default_Handler .section .isr_vector,"a",%progbits .type g_pfnVectors, %object g_pfnVectors: .word _estack // Top of Stack .word Reset_Handler // Reset Handler .word NMI_Handler // NMI Handler .word HardFault_Handler // Hard Fault Handler .word MemManage_Handler // MPU Fault Handler .word BusFault_Handler // Bus Fault Handler .word UsageFault_Handler // Usage Fault Handler .word 0 // Reserved .word 0 // Reserved .word 0 // Reserved .word 0 // Reserved .word SVC_Handler // SVCall Handler .word DebugMon_Handler // Debug Monitor Handler .word 0 // Reserved .word PendSV_Handler // PendSV Handler .word SysTick_Handler // SysTick Handler // external interrupts handler .word WWDGT_IRQHandler // 16:Window Watchdog Timer .word LVD_IRQHandler // 17:LVD through EXTI Line detect .word TAMPER_IRQHandler // 18:Tamper through EXTI Line detect .word RTC_IRQHandler // 19:RTC through EXTI Line .word FMC_IRQHandler // 20:FMC .word RCU_CTC_IRQHandler // 21:RCU and CTC .word EXTI0_IRQHandler // 22:EXTI Line 0 .word EXTI1_IRQHandler // 23:EXTI Line 1 .word EXTI2_IRQHandler // 24:EXTI Line 2 .word EXTI3_IRQHandler // 25:EXTI Line 3 .word EXTI4_IRQHandler // 26:EXTI Line 4 .word DMA0_Channel0_IRQHandler // 27:DMA0 Channel0 .word DMA0_Channel1_IRQHandler // 28:DMA0 Channel1 .word DMA0_Channel2_IRQHandler // 29:DMA0 Channel2 .word DMA0_Channel3_IRQHandler // 30:DMA0 Channel3 .word DMA0_Channel4_IRQHandler // 31:DMA0 Channel4 .word DMA0_Channel5_IRQHandler // 32:DMA0 Channel5 .word DMA0_Channel6_IRQHandler // 33:DMA0 Channel6 .word ADC0_1_IRQHandler // 34:ADC0 and ADC1 .word USBD_HP_CAN0_TX_IRQHandler // 35:USBD HP or CAN0 TX .word USBD_LP_CAN0_RX0_IRQHandler // 36:USBD LP or CAN0 RX0 .word CAN0_RX1_IRQHandler // 37:CAN0 RX1 .word CAN0_EWMC_IRQHandler // 38:CAN0 EWMC .word EXTI5_9_IRQHandler // 39:EXTI5 to EXTI9 .word TIMER0_BRK_TIMER8_IRQHandler // 40:TIMER0 Break and TIMER8 .word TIMER0_UP_TIMER9_IRQHandler // 41:TIMER0 Update and TIMER9 .word TIMER0_TRG_CMT_TIMER10_IRQHandler // 42:TIMER0 Trigger and Commutation and TIMER10 .word TIMER0_Channel_IRQHandler // 43:TIMER0 Channel Capture Compare .word TIMER1_IRQHandler // 44:TIMER1 .word TIMER2_IRQHandler // 45:TIMER2 .word TIMER3_IRQHandler // 46:TIMER3 .word I2C0_EV_IRQHandler // 47:I2C0 Event .word I2C0_ER_IRQHandler // 48:I2C0 Error .word I2C1_EV_IRQHandler // 49:I2C1 Event .word I2C1_ER_IRQHandler // 50:I2C1 Error .word SPI0_IRQHandler // 51:SPI0 .word SPI1_I2S1ADD_IRQHandler // 52:SPI1 or I2S1ADD .word USART0_IRQHandler // 53:USART0 .word USART1_IRQHandler // 54:USART1 .word USART2_IRQHandler // 55:USART2 .word EXTI10_15_IRQHandler // 56:EXTI10 to EXTI15 .word RTC_Alarm_IRQHandler // 57:RTC Alarm .word USBD_WKUP_IRQHandler // 58:USBD Wakeup .word TIMER7_BRK_TIMER11_IRQHandler // 59:TIMER7 Break and TIMER11 .word TIMER7_UP_TIMER12_IRQHandler // 60:TIMER7 Update and TIMER12 .word TIMER7_TRG_CMT_TIMER13_IRQHandler // 61:TIMER7 Trigger and Commutation and TIMER13 .word TIMER7_Channel_IRQHandler // 62:TIMER7 Channel Compare .word ADC2_IRQHandler // 63:ADC2 .word EXMC_IRQHandler // 64:EXMC .word SDIO_IRQHandler // 65:SDIO .word TIMER4_IRQHandler // 66:TIMER4 .word SPI2_I2S2ADD_IRQHandler // 67:SPI2 or I2S2ADD .word UART3_IRQHandler // 68:UART3 .word UART4_IRQHandler // 69:UART4 .word TIMER5_DAC_IRQHandler // 70:TIMER5 and DAC0 DAC1 Underrun error .word TIMER6_IRQHandler // 71:TIMER6 .word DMA1_Channel0_IRQHandler // 72:DMA1 Channel0 .word DMA1_Channel1_IRQHandler // 73:DMA1 Channel1 .word DMA1_Channel2_IRQHandler // 74:DMA1 Channel2 .word DMA1_Channel3_4_IRQHandler // 75:DMA1 Channel3 and Channel4 .word 0 // 76:Reserved .word 0 // 77:Reserved .word 0 // 78:Reserved .word CAN1_TX_IRQHandler // 79:CAN1 TX .word CAN1_RX0_IRQHandler // 80:CAN1 RX0 .word CAN1_RX1_IRQHandler // 81:CAN1 RX1 .word CAN1_EWMC_IRQHandler // 82:CAN1 EWMC .word 0 // 83:Reserved .word 0 // 84:Reserved .word SHRTIMER_IRQ2_IRQHandler // 85:SHRTIMER IRQ2 .word SHRTIMER_IRQ3_IRQHandler // 86:SHRTIMER IRQ3 .word SHRTIMER_IRQ4_IRQHandler // 87:SHRTIMER IRQ4 .word SHRTIMER_IRQ5_IRQHandler // 88:SHRTIMER IRQ5 .word SHRTIMER_IRQ6_IRQHandler // 89:SHRTIMER IRQ6 .word 0 // 90:Reserved .word 0 // 91:Reserved .word SHRTIMER_IRQ0_IRQHandler // 92:SHRTIMER IRQ0 .word SHRTIMER_IRQ1_IRQHandler // 93:SHRTIMER IRQ1 .word 0 // 94:Reserved .word 0 // 95:Reserved .word 0 // 96:Reserved .word 0 // 97:Reserved .word I2C2_EV_IRQHandler // 98:I2C2 Event .word I2C2_ER_IRQHandler // 99:I2C2 Error .word USART5_IRQHandler // 100:USART5 .word I2C2_WKUP_IRQHandler // 101:I2C2 Wakeup .word USART5_WKUP_IRQHandler // 102:USART5 Wakeup .word 0 // 103:Reserved .size g_pfnVectors, .-g_pfnVectors .section .text.Reset_Handler .weak Reset_Handler .type Reset_Handler, %function Reset_Handler: ldr r1, =_sidata ldr r2, =_sdata ldr r3, =_edata subs r3, r2 ble fill_bss_start loop_copy_data: subs r3, #4 ldr r0, [r1,r3] str r0, [r2,r3] bgt loop_copy_data fill_bss_start: ldr r1, =__bss_start ldr r2, =__bss_end movs r0, 0 subs r2, r1 ble startup_enter loop_fill_bss: subs r2, #4 str r0, [r1, r2] bgt loop_fill_bss startup_enter: bl SystemInit bl entry /* Exception Handlers */ .weak NMI_Handler .type NMI_Handler, %function NMI_Handler: b . .size NMI_Handler, . - NMI_Handler .weak MemManage_Handler .type MemManage_Handler, %function MemManage_Handler: b . .size MemManage_Handler, . - MemManage_Handler .weak BusFault_Handler .type BusFault_Handler, %function BusFault_Handler: b . .size BusFault_Handler, . - BusFault_Handler .weak UsageFault_Handler .type UsageFault_Handler, %function UsageFault_Handler: b . .size UsageFault_Handler, . - UsageFault_Handler .weak SVC_Handler .type SVC_Handler, %function SVC_Handler: b . .size SVC_Handler, . - SVC_Handler .weak DebugMon_Handler .type DebugMon_Handler, %function DebugMon_Handler: b . .size DebugMon_Handler, . - DebugMon_Handler .weak PendSV_Handler .type PendSV_Handler, %function PendSV_Handler: b . .size PendSV_Handler, . - PendSV_Handler .weak SysTick_Handler .type SysTick_Handler, %function SysTick_Handler: b . .size SysTick_Handler, . - SysTick_Handler /* IQR Handler */ .section .text.Default_Handler,"ax",%progbits .type Default_Handler, %function Default_Handler: b . .size Default_Handler, . - Default_Handler .macro IRQ handler .weak \handler .set \handler, Default_Handler .endm IRQ WWDGT_IRQHandler IRQ LVD_IRQHandler IRQ TAMPER_IRQHandler IRQ RTC_IRQHandler IRQ FMC_IRQHandler IRQ RCU_CTC_IRQHandler IRQ EXTI0_IRQHandler IRQ EXTI1_IRQHandler IRQ EXTI2_IRQHandler IRQ EXTI3_IRQHandler IRQ EXTI4_IRQHandler IRQ DMA0_Channel0_IRQHandler IRQ DMA0_Channel1_IRQHandler IRQ DMA0_Channel2_IRQHandler IRQ DMA0_Channel3_IRQHandler IRQ DMA0_Channel4_IRQHandler IRQ DMA0_Channel5_IRQHandler IRQ DMA0_Channel6_IRQHandler IRQ ADC0_1_IRQHandler IRQ USBD_HP_CAN0_TX_IRQHandler IRQ USBD_LP_CAN0_RX0_IRQHandler IRQ CAN0_RX1_IRQHandler IRQ CAN0_EWMC_IRQHandler IRQ EXTI5_9_IRQHandler IRQ TIMER0_BRK_TIMER8_IRQHandler IRQ TIMER0_UP_TIMER9_IRQHandler IRQ TIMER0_TRG_CMT_TIMER10_IRQHandler IRQ TIMER0_Channel_IRQHandler IRQ TIMER1_IRQHandler IRQ TIMER2_IRQHandler IRQ TIMER3_IRQHandler IRQ I2C0_EV_IRQHandler IRQ I2C0_ER_IRQHandler IRQ I2C1_EV_IRQHandler IRQ I2C1_ER_IRQHandler IRQ SPI0_IRQHandler IRQ SPI1_I2S1ADD_IRQHandler IRQ USART0_IRQHandler IRQ USART1_IRQHandler IRQ USART2_IRQHandler IRQ EXTI10_15_IRQHandler IRQ RTC_Alarm_IRQHandler IRQ USBD_WKUP_IRQHandler IRQ TIMER7_BRK_TIMER11_IRQHandler IRQ TIMER7_UP_TIMER12_IRQHandler IRQ TIMER7_TRG_CMT_TIMER13_IRQHandler IRQ TIMER7_Channel_IRQHandler IRQ ADC2_IRQHandler IRQ EXMC_IRQHandler IRQ SDIO_IRQHandler IRQ TIMER4_IRQHandler IRQ SPI2_I2S2ADD_IRQHandler IRQ UART3_IRQHandler IRQ UART4_IRQHandler IRQ TIMER5_DAC_IRQHandler IRQ TIMER6_IRQHandler IRQ DMA1_Channel0_IRQHandler IRQ DMA1_Channel1_IRQHandler IRQ DMA1_Channel2_IRQHandler IRQ DMA1_Channel3_4_IRQHandler IRQ CAN1_TX_IRQHandler IRQ CAN1_RX0_IRQHandler IRQ CAN1_RX1_IRQHandler IRQ CAN1_EWMC_IRQHandler IRQ SHRTIMER_IRQ2_IRQHandler IRQ SHRTIMER_IRQ3_IRQHandler IRQ SHRTIMER_IRQ4_IRQHandler IRQ SHRTIMER_IRQ5_IRQHandler IRQ SHRTIMER_IRQ6_IRQHandler IRQ SHRTIMER_IRQ0_IRQHandler IRQ SHRTIMER_IRQ1_IRQHandler IRQ I2C2_EV_IRQHandler IRQ I2C2_ER_IRQHandler IRQ USART5_IRQHandler IRQ I2C2_WKUP_IRQHandler IRQ USART5_WKUP_IRQHandler ``` # 导入RTTStudioIDE ## 导入工程 有了GCC版本的启动文件,那不妨先用RTTStudio导入一下工程,然后再根据错误想办法解决。点击“文件”菜单内的“导入”图标,打开导入对话框: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/8609ef1d9567906797a9b16b0944247c.png) 选择“RT-Thread Bsp到工作空间中”,然后点击下一步按钮: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/48e963512b5f9f07940be8721b3abdae.png.webp) 根据自己的实际情况填写内容,然后点击“完成按钮”进行导入: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/db52fd93c1f5b3b2aed84f005294cd65.png.webp) 如下是我导入后的项目资源列表,会把所需的内容都拷贝到工程内部: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/88262e256e4f8b178f66c74293f77cdc.png) ## 编译根据错误解决问题 不妨先编译一下工程,发现报了一些错误,这是必然的,因为还有很多操作没做呢。那首当其冲的错误就是如下的GCC不支持m33内核的问题。 ``` arm-none-eabi-gcc: error: unrecognized argument in option '-mcpu=cortex-m33+nodsp' arm-none-eabi-gcc: note: valid arguments to '-mcpu=' are: arm1020e arm1020t arm1022e arm1026ej-s arm10e arm10tdmi arm1136j-s arm1136jf-s arm1156t2-s arm1156t2f-s arm1176jz-s arm1176jzf-s arm2 arm250 arm3 arm6 arm60 arm600 arm610 arm620 arm7 arm70 arm700 arm700i arm710 arm7100 arm710c arm710t arm720 arm720t arm740t arm7500 arm7500fe arm7d arm7di arm7dm arm7dmi arm7m arm7tdmi arm7tdmi-s arm8 arm810 arm9 arm920 arm920t arm922t arm926ej-s arm940t arm946e-s arm966e-s arm968e-s arm9e arm9tdmi cortex-a12 cortex-a15 cortex-a15.cortex-a7 cortex-a17 cortex-a17.cortex-a7 cortex-a5 cortex-a53 cortex-a57 cortex-a57.cortex-a53 cortex-a7 cortex-a72 cortex-a72.cortex-a53 cortex-a8 cortex-a9 cortex-m0 cortex-m0.small-multiply cortex-m0plus cortex-m0plus.small-multiply cortex-m1 cortex-m1.small-multiply cortex-m3 cortex-m4 cortex-m7 cortex-r4 cortex-r4f cortex-r5 cortex-r7 cortex-r8 ep9312 exynos-m1 fa526 fa606te fa626 fa626te fa726te fmp626 generic-armv7-a iwmmxt iwmmxt2 marvell-pj4 mpcore mpcorenovfp native strongarm strongarm110 strongarm1100 strongarm1110 xgene1 xscale make: *** [rt-thread/src/subdir.mk:54: rt-thread/src/clock.o] Error 1 ``` ## 更新GCC 去arm官网,下载最新版本的gcc-arm-none-eabi: [GCC下载地址: https://developer.arm.com/downloads/-/gnu-rm](https://developer.arm.com/downloads/-/gnu-rm "GCC下载地址") ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/8c8bf3f388e266eb369452f590c760c7.png.webp) 把解压后的GCC文件夹拷贝到RTTStudio的GCC工具路径内,为了减小点路径长度,可以把文件夹名字重命名为"10.3": ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/059aa674c93c1ae5d538355de01c5bb6.png) 点击“构建配置”工具图标,打开配置对话框,在“设置”栏的“Toolchains”图页内就可以配置GCC相关信息了。GCC应该是向下兼容的,这里不妨选择"global"进行全局设置: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/40f6f9221b8cac3f90c9c1396678fe4e.png.webp) 点击“浏览”按钮,选择刚加入的GCC工具路径,要选择到里面的bin级目录: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/dc403297dbda3fadae242cbe1adcacbe.png.webp) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/a0fc494865a13392f0b43e8da22c927a.png.webp) ## 添加“cmsis_gcc.h”头文件 点击“应用并关闭”按钮,完成修改,再次编译,发现之前不支持M33内核的错误不见了。不过错误反而变多了😅,也很正常,因为之前就没进行到GCC编译这一步,很多错误自然出现不了,不用着急,先看第一个错误: ``` D:\RT-ThreadStudio\workspace\FOC_MiniCar\libraries\GD32E50x_Firmware_Library\CMSIS/cmsis_compiler.h:54:12: fatal error: cmsis_gcc.h: No such file or directory 54 | #include "cmsis_gcc.h" ``` 报的是固件库缺少“cmsis_gcc.h”文件。也对,官方固件并没有做GCC的支持,怎么会有这个头文件呢。那继续从其它固件那里拷贝一份到当前工程内即可,当然为了之前做的BSP的完整性,也可以同时往其对应位置拷贝一份: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/e762fd133c2b130e911b7b9f93c7100c.png.webp) 再次编译,呕吼!错误更多了,依然不急,先看第一个错误: ``` D:\RT-ThreadStudio\workspace\FOC_MiniCar\libraries\GD32E50x_Firmware_Library\CMSIS/core_cm33.h:2668:10: fatal error: mpu_armv8.h: No such file or directory 2668 | #include "mpu_armv8.h" ``` 提示找不到"mpu_armv8.h"头文件。这里比较奇怪,m33内核确实属于armv8架构,但官方固件库内却找不到此头文件,倒是在其它的BSP内搜到了此头文件,于是随便拷贝一个到工程内即可,比如我是从瑞萨的一个BSP内拷贝的。当然,这里也可以关掉mpu的配置宏,不用mpu。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/a0f3a4f40e5598214fcf05e271fdfd74.png.webp) 于是再次进行编译,就会发现编译通过了: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/7143bc838d52c0b6d1985c8757ac1da8.png) ## 更新pyocd 那不妨下载一下试试,不出意外自然会出现意外,果真不能正常下载。原因就是最开始提到的自带的pyocd版本太老了,不支持GD32E503RC的器件。需要更新pyocd: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/757e6a5b4abc5efbe8c54cbd7c752832.png.webp) 打开CMD命令窗口,运行如下命令,安装新的pyocd: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/3fab602f3a272792cc86b1f36e0f36c1.png) 等待安装完毕,就可以在python的安装路径下找到新的"pyocd.exe" ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/d18c4bc75fecf22f0ef560f64100cee4.png) 在终端输入“pyocd -V”命令,可查看到新安装pyocd的版本。还可以输入“pyocd list --targets”命令查看目前pyocd支持的器件。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/aa595d06be4fc57d3bde6755e87d105c.png) 最后会发现,默认并不支持兆易创新的器件,所以,还需要自己添加支持包: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/45725a405236952781fc922e80dd479d.png) 安装完后,再查看安装包和支持的器件,就能找到GD32了: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/f6423c922da423f0d9fe99a789606278.png) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/527a73c1c680fcf3781b2363c85f2e78.png) 最后再修改一些RTTStudio的工程配置,选择先安装的pyocd.exe和pyocd-gdbserver.exe: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/a8b235df2e352e2f9913837eef347b4b.png.webp) 然后再尝试一些烧写,就可以正常下载甚至调试程序了: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230617/843f82d6594149aebf818b1370dfe62b.png.webp) # 相关链接 [本系列首篇文章链接: https://club.rt-thread.org/ask/article/5c0c4ba7eb4ab1ad.html](https://club.rt-thread.org/ask/article/5c0c4ba7eb4ab1ad.html "首篇文章链接: https://club.rt-thread.org/ask/article/5c0c4ba7eb4ab1ad.html")
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
吉利咕噜2022
国防科大-军品研发
文章
18
回答
3
被采纳
2
关注TA
发私信
相关文章
1
STM32 407 串口接收数据 系统卡死
2
RTT nrf24l01 设备驱动程序
3
stm32f10x串口只能发送数据,无法接收
4
第一次尝试移植rt-thread 到stm32F103系列问题
5
有人把stm32L07xx的bsp移到rtt上来了吗?求一个
6
rt-thread线程调度异常在stm32f103芯片上
7
RTT是否支持STM32F429
8
请问谁有 STM32F40x HAL + RT-THREAD 模板
9
rt-thread在stm32f411下的移植问题
10
针对STM32F7系列平台的MPU,Cache特性,需要注意哪些问题?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
11
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部