[技术相关] 【SWM166-SPI-Y1.28C1测评】之三:SWM166GPIO测试

[复制链接]
 楼主| abner_ma 发表于 2023-12-16 14:50 | 显示全部楼层 |阅读模式
<
spi, 6G, GPIO, IO, gp, pi

  SWM166-SPI-Y1.28C1圆形屏,采用SWM166作为主控,这个单片机第一次用。先搞了GPIO测试:
1.png
A11.png
00.png

     

   参照原理图。LED与A1,A2,A3链接。这个LED 电路驱动很巧妙。

01.png

主函数:
延时函数,时钟初始化,GPIO配置,这是基础功。
  1. #include "SWM166.h"



  2. void delay_us(unsigned int time)
  3. {   
  4.    unsigned int i=0;  
  5.    while(time--)
  6.    {
  7.       i=10;  //????
  8.       while(i--) ;   
  9.    }
  10. }

  11. void delay_ms(unsigned int time)
  12. {   
  13.    unsigned int i=0;  
  14.    while(time--)
  15.    {
  16.       i=12000;  //????
  17.       while(i--) ;   
  18.    }
  19. }

  20. int main(void)
  21. {       
  22.         SystemInit();
  23.        
  24.         GPIO_Init(GPIOA, PIN2, 0, 1, 0, 0);                        //ÊäÈ룬ÉÏÀ­Ê¹ÄÜ£¬½ÓKEY
  25.        
  26.         GPIO_Init(GPIOA, PIN1, 1, 0, 0, 0);                        //Êä³ö£¬ ½ÓLED
  27.         GPIO_Init(GPIOA, PIN2, 1, 0, 0, 0);                        //Êä³ö£¬ ½ÓLED
  28.         GPIO_Init(GPIOA, PIN3, 1, 0, 0, 0);                        //Êä³ö£¬ ½ÓLED
  29.        
  30.         while(1==1)
  31.         {
  32.                
  33.                
  34.                         GPIO_SetBit(GPIOA, PIN1);
  35.                         GPIO_SetBit(GPIOA, PIN2);
  36.                         GPIO_SetBit(GPIOA, PIN3);
  37.       delay_ms(1000);

  38.                         GPIO_ClrBit(GPIOA, PIN1);
  39.                         GPIO_ClrBit(GPIOA, PIN2);
  40.                         GPIO_ClrBit(GPIOA, PIN3);
  41.                   delay_ms(1000);
  42.                
  43.         }
  44. }
03.png
  1. void GPIO_Init(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t dir, uint32_t pull_up, uint32_t pull_down, uint32_t open_drain)
  2. {
  3.         PORT_TypeDef * PORTx = PORTA;
  4.        
  5.         switch((uint32_t)GPIOx)
  6.         {
  7.         case ((uint32_t)GPIOA):
  8.                 SYS->CLKEN0 |= (0x01 << SYS_CLKEN0_GPIOA_Pos);
  9.                
  10.                 PORTx = PORTA;
  11.                 break;
  12.        
  13.         case ((uint32_t)GPIOB):
  14.                 SYS->CLKEN0 |= (0x01 << SYS_CLKEN0_GPIOB_Pos);
  15.                
  16.                 PORTx = PORTB;
  17.                 break;
  18.        
  19.         case ((uint32_t)GPIOM):
  20.                 SYS->CLKEN0 |= (0x01 << SYS_CLKEN0_GPIOM_Pos);
  21.                
  22.                 PORTx = PORTM;
  23.                 break;
  24.         }
  25.        
  26.         PORT_Init(PORTx, n, 0, 1);                        //PORTx.PINnÒý½ÅÅäÖÃΪGPIO¹¦ÄÜ£¬Êý×ÖÊäÈ뿪Æô
  27.         if(dir == 1)
  28.         {                       
  29.                 GPIOx->DIR |= (0x01 << n);
  30.         }
  31.         else
  32.         {
  33.                 GPIOx->DIR &= ~(0x01 << n);
  34.         }
  35.        
  36.         if(pull_up == 1)     PORTx->PULLU |=  (1 << n);
  37.         else                 PORTx->PULLU &= ~(1 << n);
  38.         if(pull_down == 1)   PORTx->PULLD |=  (1 << n);
  39.         else                 PORTx->PULLD &= ~(1 << n);
  40.         if(open_drain == 1)  PORTx->OPEND |=  (1 << n);
  41.         else                 PORTx->OPEND &= ~(1 << n);
  42. }
  1. /******************************************************************************************************************************************
  2. **时钟初始化,此函数用于更新变量SystemCoreClock,每当核心时钟发生变化时必须调用此函数
  3. ******************************************************************************************************************************************/
  4. void SystemInit(void)
  5. {
  6.         SYS->CLKEN0 |= (1 << SYS_CLKEN0_ANAC_Pos);
  7.        
  8.         if((SYS->BACKUP[3] >> 29) == 5)
  9.                 *((__IO uint32_t *)((uint32_t)&SYS->HRCCR + 8)) = SYS->BACKUP[3] & (~(7u << 29));
  10.        
  11.         Flash_Param_at_xMHz(90);
  12.        
  13.         switch(SYS_CLK)
  14.         {
  15.                 case SYS_CLK_12MHz:
  16.                         switchTo12MHz();
  17.                         break;
  18.                
  19.                 case SYS_CLK_1M5Hz:
  20.                         switchTo1M5Hz();
  21.                         break;
  22.                
  23.                 case SYS_CLK_XTAL:
  24.                         switchToXTAL(0);
  25.                         break;
  26.                
  27.                 case SYS_CLK_XTAL_DIV8:
  28.                         switchToXTAL(1);
  29.                         break;
  30.                
  31.                 case SYS_CLK_PLL:
  32.                         switchToPLL(0);
  33.                         break;
  34.                
  35.                 case SYS_CLK_PLL_DIV8:
  36.                         switchToPLL(1);
  37.                         break;

  38.                 case SYS_CLK_32KHz:
  39.                         switchTo32KHz();
  40.                         break;
  41.         }
  42.        
  43.         SystemCoreClockUpdate();
  44.        
  45.         Flash_Param_at_xMHz(SystemCoreClock/1000000);
  46.        
  47.         FMC->CACHE = (1 << FMC_CACHE_CEN_Pos) | (1 << FMC_CACHE_CCLR_Pos);        // Çå³ý Cache
  48.         __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
  49.         FMC->CACHE = (1 << FMC_CACHE_CEN_Pos) | (1 << FMC_CACHE_CPEN_Pos);
  50.        
  51.         PORTB->PULLD &= ~((1 << PIN10) | (1 << PIN11));
  52.         PORTB->PULLU &= ~((1 << PIN12) | (1 << PIN14));
  53.        
  54.         SYS->PGACR &= ~SYS_PGACR_VRTRIM_Msk;        //PGAÕýÊäÈë¶Ë²Î¿¼µçѹУ׼
  55.         SYS->PGACR |= ((SYS->CHIPID[3] & 0x000F) << SYS_PGACR_VRTRIM_Pos);

  56.         SYS->PGACR &= ~SYS_PGACR_DATRIM_Msk;        //ÓÃÓÚ²úÉúACMP NÊäÈë¶ËµçѹµÄDACµÄ²Î¿¼µçѹУ׼
  57.         SYS->PGACR |= (((SYS->CHIPID[3] >> 16) & 0x000F) << SYS_PGACR_DATRIM_Pos);
  58. }







您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:项目经理
简介:资深嵌入式开发工程师

95

主题

181

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部
认证:项目经理
简介:资深嵌入式开发工程师

95

主题

181

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部