正点原子开发板ucGUI移植心得

2019-07-21 05:10发布

原子哥提供的实验29提供了ucOS+ucGUI的移植,尽管很好,但是对于像我这样的初学者同时消耗两个内容太难了,本人想一个一个吃掉,先吃ucGUI,可能是原子哥比较忙,没有提供相关移植过程的教程,小弟只能自己琢磨,最后终于搞定,现班门弄斧!
硬件平台:正点原子开发板,软件:ucgui3.98
步骤:
(1)以原子提供的TFT-LCD实验例程为基础,进行ucgui移植;
(2)便于管理,在实验例程的工程中建立ucGUI文件夹,将ucgui3.98中的ucGUI/AntiAlias,ucGUI/ConverMono,ucGUI/ConverColor,ucGUI/Font,ucGUI/Mendev,ucGUI/Widget,ucGUI/WM,ucGUI/Core等目录及内部代码文件复制到实验例程的ucGUI文件夹中,并在projet/management中相应地建立上述工程目录,并将各自所包含的文件添加到工程中。
(3)同样方法,建立Config、ucGUI_X和ucGUI/LCDDriver三个文件夹和相应的三个工程目录,将正点原子例程29中Config中三个文件复制过来,将ucGUI中的GUI_X.c和GUI_X_Touch.c复制过来,将LCDDriver中的ili9320_ucgui.c,ili9320_api.c和ILI93XX.c复制过来,最后仍然要添加到工程中;
(4)删除原工程hardware中lcd驱动文件ILI93XX.c
(5)在flash/config flash tool中的include选项中添加ucGUI/core,Config,ucGUI_X和ucGUI/LCDDriver三个目录路径
(6)最后编译通过,由于ucGUI版本的原因,可能在连接的时候会出现 一个LCD_L0_GetDevFunc变量没有定义,这时只需在ucGUI/Core/LCD_AP.C中屏蔽该变量即可。

正点原子开发板购买淘宝店铺:
http://openedv.taobao.com
正点原子STM32视频资料下载地址:
http://www.openedv.com/posts/list/13334.htm
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
49条回答
星空
2019-07-27 09:47
大家好,我遇到一个问题想请教一下大家。我使用正点原子mini开发板做了个外部中断的实验,选用的是第32和第33个引脚分别作为按键1,按键2的IO口------PB12,PB3.这两个IO口除去作为通用IO口外,都有复用功能。
PB12功能(包含复用功能)为:PB12/SPI2_NSS/I2S2_WS/I2C2_SMBAI/TIM1_BKIN;
PB13功能(包含服用功能)为:PB13/SPI2_SCK/I2S2_CK/TIM1_CH1N。
可是按按键不能进入外部中断服务程序,不知道是什么原因,下面是我的代码,还请知道原因的大哥能够指点一二,谢谢。
代码:
void EXTIX_Init(void)
{
   EXTI_InitTypeDef EXTI_InitStructure;
   NVIC_InitTypeDef NVIC_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//外部中断,需要使能AFIO时钟

  KEY_Init();//初始化按键对应io模式

   //GPIOB.12 中断线以及中断初始化配置
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource12);

  EXTI_InitStructure.EXTI_Line=EXTI_Line12;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器

    //GPIOB.13   中断线以及中断初始化配置
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource13);

  EXTI_InitStructure.EXTI_Line=EXTI_Line13;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);   //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器

    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //使能按键所在的外部中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2, 
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //子优先级1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
    NVIC_Init(&NVIC_InitStructure);
}

void EXTI15_10_IRQHandler(void)
{
  delay_ms(10);    //消抖  
   if(EXTI_GetITStatus(EXTI_Line12) != RESET)
    {
      sei();
      GPIOD->ODR^=0x04;  //led灯1随着按键1的按动亮灭
      EXTI_ClearITPendingBit(EXTI_Line12);   
   }
   else if(EXTI_GetITStatus(EXTI_Line13) != RESET)
    {
     sei();
     GPIOD->ODR^=0x08;  //led灯2随着按键2的按动亮灭
     EXTI_ClearITPendingBit(EXTI_Line13);   
   }
}

void KEY_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PORTB时钟
 GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_12| GPIO_Pin_13;//PB12,PB13
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PB12,PB13设置成输入,默认下拉  
 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化PB2,PB3
}

int main(void)
{
  delay_init();     //延时函数初始化
 LED_Init();   //初始化与LED连接的硬件接口 
  EXTIX_Init(); //外部中断初始化
  while(1)
 {

 }
}

一周热门 更多>