【国产MCU学步随笔------兆易创新GD32f103CBT6,及vscode编辑环境配置】
文章目录
- vscode编辑环境配置
- 官方库例程迷惑解答
-
- 时钟在哪里初始化
- 时钟在哪里配置
- NVIC在哪里初始化
- NVIC中断分组是什么
- printf怎么重映射
vscode编辑环境配置
- 下载官方库:链接
- 插件安装
c/c++的常用插件,不喜欢英文的可以换个中文:
- 工程目录下添加vsc的配置文件
工程目录下新建.vscode
文件夹,然后里面新建两个文件:
- c_cpp_properties.json
- setting.json
文件内容如下,注意definesp配置下面的配置项是保存后自动生成的:
{ "configurations": [ { "name": "temp", "includePath": [ //"D:/Keil_v5/ARM/ARMCC/include", "D:/GreenSoft/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include", "${workspaceFolder}/**" // "${workspaceFolder}/Firmware/CMSIS/GD/GD32F10x/Include", // "${workspaceFolder}/firmware/CMSIS", // "${workspaceFolder}/Template", // "${workspaceFolder}/firmware/GD32F10x_standard_peripheral/Include" ], "defines": [ "__CC_ARM", "GD32F10X_MD" ], "intelliSenseMode": "windows-msvc-x64", "compilerPath": "D:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30037\\bin\\Hostx64\\x64\\cl.exe", "cStandard": "c17", "cppStandard": "c++17" } ], "version": 4}
- setting.json
文件内容:
{ "files.associations": { "gd32f10x.h": "c", "gd32f10x_libopt.h": "c", "main.h": "c" }, "clang.cflags": [ "-I${workspaceRoot}/Firmware/CMSIS/GD/GD32F10x/Include" ]}
如果安装了clangd插件要注意:
- setting.json里面的clang.cflags路径需要改动的话换成你的对应路径。
- 对于第三方库,照葫芦画瓢即可
官方库例程迷惑解答
时钟在哪里初始化
先在启动文件中调用了SystemInit()然后才调用main(),SystemInit()位于system_gd32f10x.c里面,然后在该函数中初始化时钟
时钟在哪里配置
也是在system_gd32f10x.c里面,最上面,通过这个宏就可以快捷配置
NVIC在哪里初始化
同上,初始化时钟函数下面就会初始化中断管理
NVIC中断分组是什么
通过以下语句获取当前中断分组:
printf("\r\nNVIC Priority Group is %d\r\n", NVIC_GetPriorityGrouping());
不进行更改的话可以看到中断分组:
参考CM3权威指南:
stm32有4个bit是用来中断分组的,gd32也是,如下应有手册说明。该寄存器是MSB对齐的,所以GD32f103CBT6的默认中断优先级分组是[7:6]两位表示抢占优先级,[5:4]两位表示亚优先级,[3:0]四位并未使用
printf怎么重映射
这个参考GD固件库,先配置对应串口,再添加重隐射函数就好了,官方例程copy就可以,注意gd串口号为0、1、2
串口1重映射函数如下:
/* retarget the C library printf function to the USART */int fputc(int ch, FILE *f){ usart_data_transmit(USART1, (uint8_t)ch); while(RESET == usart_flag_get(USART1, USART_FLAG_TBE)); return ch;}
第一次用gd的单片机,如果后续还有用gd芯片的话本文档会不定期更新
欢迎各路小白一起讨论