电子说
准备工作:
先下载了官方提供的手册、DEMO、固件包,并通读了一下(注意,MDK版本要求比较高!为了找个能用的Keil折腾了很久):
制作裸机点灯代码
前面已经有‘探路者’把这部分做完了,我就不再叙述了,不过还是要自己动手移植一下,这样可以了解片子与f103等常用的芯片的区别。
添加FreeRTOS部分
这是第一次真正意义上自己独立移植了一次FreeRTOS^_^,没有遇到太多的障碍:
使用的FreeRTOS版本是正点原子f103光盘里面的,9.0版本
解压缩后,只需要复制FreeRTOS,而用不到*-Plus:
FreeRTOS中,也有很多用不到的文件,请参考正点原子开源的FreeRTOS移植教程。
需要注意的地方是GD32的中断都放在了gd32f3x0_it.c中,需要屏蔽2个中断空函数,进而直接调用freeRTOS内的同名函数:
并在systick_handler中加入调用FreeRTOS的时钟函数:
void SysTick_Handler(void) { //led_spark(); delay_decrement(); #if (INCLUDE_xTaskGetSchedulerState == 1) if (xTaskgetSchedulerState() != taskSCHEDULER_NOT_STARTED) { #endif xPortSysTickHandler(); #if (INCLUDE_xTaskGetSchedulerState == 1) } #endif }
主要FreeRTOS的栈设置要合理:
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 2 * 1024 ) )
Program Size: Code=6068 RO-data=6448 RW-data=112 ZI-data=4296
这样片子的可玩性还是挺高的。
移植正点原子OLED代码:
这部分代码逻辑比较简单,看下正点原子的教程都可以很快搞定:
主要修改了正点原子通过位带操作控制引脚改为使用GD的库函数:
//---------------------------OLED端口定义-------------------------- #define OLED_CS(x) gpio_bit_write(GPIOB,GPIO_PIN_0,(FlagStatus)(x)); #define OLED_RST(x) gpio_bit_write(GPIOA,GPIO_PIN_5,(FlagStatus)(x)); #define OLED_DC(x) gpio_bit_write(GPIOB,GPIO_PIN_1,(FlagStatus)(x)); #define OLED_WR(x) gpio_bit_write(GPIOB,GPIO_PIN_4,(FlagStatus)(x)); #define OLED_RD(x) gpio_bit_write(GPIOB,GPIO_PIN_5,(FlagStatus)(x));
最终完成移植:
总结
现在芯片都比较成熟,性能都过剩,这款芯片提供的资料也都够用,对于上手使用比较方便。后面自己做一些手表、物联网小产品,可以玩一下。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !