以后要对自己的板子好点,鬼才知道它在离开你后都会经历些什么。
这两天挤出点时间把FreeRTOS移植了一下,只是插科打诨而已没有太多细节。
具体移植细节附件有一个按着教程一步一步来大体上没啥问题。
期间遇到的问题也仅仅只有以下这句
#error This port can only be used when the project options are configured to enable hardware floating point support.
而GD32F350是没有硬件浮点数单元的,只是粗略看了看datasheet,如果有各位可以那搬砖拍拍我的脑子。所以呢咋办?我是用的M3的port.c文件如果有更好的办法还望通知一下懒惰到无药可救的我。
然后就是一切顺利然并卵的是感觉时间有问题各种有问题,所以写了个读取时钟的任务
void clock_get_task(void * pvParameters)
{
while(1){
vTaskDelay(4000);
printf("%s =%d\r\n","rcu_clock_freq_get.CK_SYS",rcu_clock_freq_get(CK_SYS));
printf("%s =%d\r\n","rcu_clock_freq_get.CK_AHB",rcu_clock_freq_get(CK_AHB));
printf("%s =%d\r\n","rcu_clock_freq_get.CK_APB1",rcu_clock_freq_get(CK_APB1));
printf("%s =%d\r\n","rcu_clock_freq_get.CK_APB2",rcu_clock_freq_get(CK_APB2));
printf("%s =%d\r\n","rcu_clock_freq_get.CK_USART",rcu_clock_freq_get(CK_USART));
printf("%s =%d\r\n","rcu_clock_freq_get",rcu_system_clock_source_get());
}
}
得到的结果是
至于原因肯定就是时钟配置问题了,然后郁闷的既然你们不含8M外部时钟,那么为啥代码里还要这样 ,本就是小白的我们就是这么被你们折磨到放弃的。。。
改掉或者动动烙铁,前提是你的有一样封装的晶振,本人懒癌发作还是该代码吧
然后世界就清新了
然后就是PWM 输出了 用的TIMER2输出4路PWM,看源码 试呗没啥太难的,郁闷的是惯性思维害死人,如下图左侧是模块框图右边是时钟框图,本能我仅仅只看了左侧的那个把 TIMER2的时钟当成了APB1,唉。。。可能我真的不适合这行了
最后就是见证奇迹的时刻代码加点
void led_task( void * pvParameters ){
while(1){
vTaskDelay(500);
led_cmd(LED4,LED_ON);
vTaskDelay(500);
led_cmd(LED4,LED_OFF);
set_pwm(TIMER_CH_1,data_ch2);
data_ch2+=100 ;
if(data_ch2>1000){
data_ch2 = 0 ;
}
}
}
下载验证一切顺利OK,明天还得加班唉,周末过得比工作日还心酸。放图结案