4回答

0收藏

【GoKit试用体验】给固件移植上ucos-ii,再也不用担心延时了

机智云GoKit 机智云GoKit 3165 人阅读 | 4 人回复 | 2015-11-11

    首先看了官方给的代码,看了好几遍,总结一个字,烂!
再看看驱动RGB灯的代码,发送clk的子函数都是几十毫秒的延时,点亮一个RGB等全过程需要1S以上。从cpu利用率上来讲,这是无法容忍的!
所以必须使用RTOS,否则延时的时候,CPU没法做其他事情了。
1.      由于公司电脑不允许安装MDK,所以用IAR工程,IAR的编译效率高,编译速度也快。
移植步骤就不说了,网上一搜很多,我就直接把移植好的工程传上来,供大家直接使用!
2.      关于底板灯的驱动,原理图的标号与PCB的丝印有些出入,这里必须指出,看了十几遍sch,发现了很多错误不严谨的地方(有一个吐槽贴说的也是这个:这个板绝对是软件工程师画的)
现在修改led驱动如下:
  pcb上的丝印与原理图的标号不一致:
    pb1--led4(sch)--led4(pcb)
    pb11--led5(sch)--led3(pcb)
    pb14--led6(sch)--led2(pcb)
    pb15--led7(sch)--led1(pcb)
  为了使用户更直观,统一采用丝印上的led标号为标准。
  1. #ifndef __BSP_GOKIT_LED_H
  2. #define __BSP_GOKIT_LED_H         

  3. #include "stm32f10x.h"

  4. typedef enum
  5. {
  6.   LED1 ,
  7.   LED2 ,    //
  8.   LED3 ,    //
  9.   LED4     //
  10. } Led_TypeDef;

  11. // 移植的时候只需修改这里,无需修改函数
  12. /* 移植的时候特别注意:
  13.    说明:swd调试会占用2个IO口,即:swdio--pa13 swclk--pa14
  14.   实际连接stlink需要4根线 Target_VCC GND SWDIO SWCLK  */

  15. #define GPIO_LED1_CLK    RCC_APB2Periph_GPIOB
  16. #define GPIO_LED1_PORT   GPIOB
  17. #define GPIO_LED1_PIN    GPIO_Pin_15

  18. #define GPIO_LED2_CLK    RCC_APB2Periph_GPIOB
  19. #define GPIO_LED2_PORT   GPIOB
  20. #define GPIO_LED2_PIN    GPIO_Pin_14

  21. #define GPIO_LED3_CLK    RCC_APB2Periph_GPIOB
  22. #define GPIO_LED3_PORT   GPIOB
  23. #define GPIO_LED3_PIN    GPIO_Pin_11

  24. #define GPIO_LED4_CLK    RCC_APB2Periph_GPIOB
  25. #define GPIO_LED4_PORT   GPIOB
  26. #define GPIO_LED4_PIN    GPIO_Pin_1

  27. #define LED1_ON()                GPIO_ResetBits(GPIO_LED1_PORT, GPIO_LED1_PIN)
  28. #define LED1_OFF()                GPIO_SetBits(GPIO_LED1_PORT,GPIO_LED1_PIN)

  29. #define LED2_OFF()                GPIO_ResetBits(GPIO_LED2_PORT, GPIO_LED2_PIN)
  30. #define LED2_ON()                GPIO_SetBits(GPIO_LED2_PORT,GPIO_LED2_PIN)

  31. #define LED3_OFF()                GPIO_ResetBits(GPIO_LED3_PORT, GPIO_LED3_PIN)
  32. #define LED3_ON()                GPIO_SetBits(GPIO_LED3_PORT,GPIO_LED3_PIN)

  33. #define LED4_ON()                GPIO_ResetBits(GPIO_LED4_PORT, GPIO_LED4_PIN)
  34. #define LED4_OFF()                GPIO_SetBits(GPIO_LED4_PORT,GPIO_LED4_PIN)


  35. void LED_Toggle(Led_TypeDef LEDX);
  36.                   
  37. void BSP_LED_Init(void);//初始化
复制代码

  1. /**
  2.   ******************************************************************************
  3.   * @file         BSP_Led.c
  4.   * @author  casy@ganx
  5.   * @version V1.0
  6.   * @Board         stm32
  7.   * @date         2014/12/29  
  8.   * 说明:        此c文件提供LED显示模块包含的所有函数功能
  9.     pcb上的丝印与原理图的标号不一致:
  10.     pb1--led4(sch)--led4(pcb)
  11.     pb11--led5(sch)--led3(pcb)
  12.     pb14--led6(sch)--led2(pcb)
  13.     pb15--led7(sch)--led1(pcb)

  14.   为了使用户更直观,统一采用丝印上的led标号为标准。
  15. ******************************************************************************/


  16. #include "bsp_gokit_led.h"


  17. /**
  18. ********************************************************
  19. * 函数名:void BSP_LED_Init(void)
  20. * 说明:LED初始化,LED4,LED5,LED6,LED7 high level Light on
  21. * 输入参数:void
  22. * 输出参数:void
  23. ********************************************************
  24. */
  25. void BSP_LED_Init(void)
  26. {
  27.           GPIO_InitTypeDef GPIO_InitStructure;
  28.         RCC_APB2PeriphClockCmd(GPIO_LED1_CLK | GPIO_LED2_CLK | GPIO_LED3_CLK | GPIO_LED4_CLK, ENABLE);
  29.        
  30.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  31.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  32.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  33.         
  34.         GPIO_InitStructure.GPIO_Pin = GPIO_LED1_PIN;
  35.         GPIO_Init(GPIO_LED1_PORT, &GPIO_InitStructure);       
  36.        
  37.         GPIO_InitStructure.GPIO_Pin = GPIO_LED2_PIN;
  38.         GPIO_Init(GPIO_LED2_PORT, &GPIO_InitStructure);       
  39.        
  40.         GPIO_InitStructure.GPIO_Pin = GPIO_LED3_PIN;
  41.         GPIO_Init(GPIO_LED3_PORT, &GPIO_InitStructure);               
  42.        
  43.         GPIO_InitStructure.GPIO_Pin = GPIO_LED4_PIN;
  44.         GPIO_Init(GPIO_LED4_PORT, &GPIO_InitStructure);       
  45.         
  46. }


  47. void LED_Toggle(Led_TypeDef LEDX)
  48. {

  49.   switch(LEDX)
  50.   {
  51.     case  LED1:
  52.       if((uint8_t)Bit_SET == GPIO_ReadOutputDataBit(GPIO_LED1_PORT, GPIO_LED1_PIN))
  53.         GPIO_ResetBits(GPIO_LED1_PORT,GPIO_LED1_PIN) ;
  54.       else
  55.         GPIO_SetBits(GPIO_LED1_PORT,GPIO_LED1_PIN);
  56.       break;

  57.     case  LED2:
  58.       if((uint8_t)Bit_SET == GPIO_ReadOutputDataBit(GPIO_LED2_PORT, GPIO_LED2_PIN))
  59.         GPIO_ResetBits(GPIO_LED2_PORT,GPIO_LED2_PIN) ;
  60.       else
  61.         GPIO_SetBits(GPIO_LED2_PORT,GPIO_LED2_PIN);
  62.       break;
  63.       
  64.     case  LED3:
  65.       if((uint8_t)Bit_SET == GPIO_ReadOutputDataBit(GPIO_LED3_PORT, GPIO_LED3_PIN))
  66.         GPIO_ResetBits(GPIO_LED3_PORT,GPIO_LED3_PIN) ;
  67.       else
  68.         GPIO_SetBits(GPIO_LED3_PORT,GPIO_LED3_PIN);
  69.       break;
  70.       
  71.     case  LED4:
  72.         if((uint8_t)Bit_SET == GPIO_ReadOutputDataBit(GPIO_LED4_PORT, GPIO_LED4_PIN))
  73.         GPIO_ResetBits(GPIO_LED4_PORT,GPIO_LED4_PIN) ;
  74.       else
  75.         GPIO_SetBits(GPIO_LED4_PORT,GPIO_LED4_PIN);
  76.       break;
  77.         
  78.       default:
  79.         break;
  80.   }

  81. }






复制代码

分享到:
回复

使用道具 举报

回答|共 4 个

倒序浏览

沙发

caizhiwei

发表于 2015-11-11 09:33:12 | 只看该作者

ucos下载地址:链接:http://pan.baidu.com/s/1eQhngGi 密码:7jh0
板凳

魅影-2023106

发表于 2015-11-11 09:42:04 | 只看该作者

对于我来说 并没什么乱用 我只是看看而已
地板

戏如人生

发表于 2015-11-11 09:43:39 | 只看该作者

谢谢分享!!
5#

caizhiwei

发表于 2015-11-11 10:11:05 | 只看该作者

哈哈,顶起来
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条