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

[复制链接]
8206|0
 楼主| abner_ma 发表于 2023-11-28 15:51 | 显示全部楼层 |阅读模式
      这是我接触的比较好的开源旋转钮显示屏,主控为SWM166 系列 32 位 MCU(以下简称 SWM166) 内嵌 ARM® Cortex®-M0 内核,高可靠性、低功耗、代码密度大等突出特点,可应用于工业控制、电机控制、白色家电等多种领域。SWM166 支持片上包含精度为 1%以内的 12M 时钟及 PLL 模块, 最高支持 90MHz 的时钟输出。同时提供最大为 64K 字节的 FLASH 和最大 8K 字节的 SRAM。此外,芯片支持向量表重映射和CACHE 单周期取指、 ISP(在系统编程)操作及 IAP(在应用编程) , 支持用户可自定义 BOOT 程序和加密操作。SWM166 外设串行总线包括最多 2 个 UART 接口, 2 个 SPI 接口(一个支持四线 QSPI), 1 个 I2C接口(支持主/择) , 1 个 CAN 接口,此外还具有 1 个 16 位看门狗定时器, 3 组 32 位(24位计数器+8 位预分频) 加强型定时器, 4 组 32 位(24 位计数器+8 位预分频) 基础型定时器, 1个 16 位正交编码器(QEI)模块, 1 个 16 位的 MPU 接口模块, 4 通道(每个通道均可扩展为具备死区的互补模式) 16 位 PWM 模块, 1 个除法器(DIV), 1 个旋转坐标计算模块(CORDIC),1 个最多 12 通道、 12 位、 1MSPS 的逐次逼近型 ADC 模块,并提供欠压中断及复位等功能。
    2.png

圆形屏的原理图,PCB厂家都开源,圆形屏用华芯微特的成本,性价超级高,自护可控,简直是白色家电的福音。


1.png

  底板把排线引脚支持双串口,下载口,一个自主可控GPIO,可以用来ADC采样或者普通IO口使用。

3.jpg

4.jpg

底层程序做的非常好,标准库做的,用户可以移植LVGL的GUI,SPI+DMA 刷屏杠杠滴,外扩flash

QQ截图20231128154630.png
  1. void SetSPI_4Bit(uint8_t Flag)
  2. {
  3.         //ÅäÖóÉ4BitÐÎʽ
  4.         if(Flag == 1)
  5.         {
  6.                 SPI_Close(SPI0);
  7.                 SPI0->CTRL &= ~SPI_CTRL_FFS_Msk;
  8.                 SPI0->CTRL |=  (3 << SPI_CTRL_FFS_Pos);
  9.                 SPI0->SPIMCR = (1 << SPI_SPIMCR_EN_Pos)                 |
  10.                                          ((Len_Buf - 1) << SPI_SPIMCR_RDLEN_Pos)         |
  11.                                          ((8 - 1)   << SPI_SPIMCR_DUMMY_Pos);
  12.                 SPI_Open(SPI0);
  13.         }
  14.         //ÅäÖóÉ1BitÐÎʽ
  15.         else
  16.         {
  17.                 SPI0->CTRL &= ~(1 << SPI_CTRL_DMARXEN_Pos);
  18.        
  19.                 SPI_Close(SPI0);
  20.                 SPI0->SPIMCR = 0;
  21.                 SPI0->CTRL &= ~SPI_CTRL_FFS_Msk;
  22.                 SPI0->CTRL |= (0 << SPI_CTRL_FFS_Pos);
  23.                 SPI_Open(SPI0);
  24.         }
  25. }

  26. //void



  27. void LogSend256(uint8_t * Buf)
  28. {
  29.         for(uint16_t j = 0; j < 256; j++)
  30.         {
  31.                 if(j % 16 == 0)
  32.                 {
  33.                         printf("\n");
  34.                 }
  35.                 printf("%02X ",Buf[j]);
  36.         }
  37. }

  38. void SPI_DMA_SendGet_Init(void)
  39. {
  40.         DMA_InitStructure DMA_initStruct;
  41.        
  42.        
  43.         /*·¢Ë͵½LCD*/               
  44.         SPI1->CTRL &= ~SPI_CTRL_DMATXEN_Msk;
  45.         SPI1->CTRL |= (1 << SPI_CTRL_DMATXEN_Pos);
  46.         DMA_initStruct.Mode = DMA_MODE_SINGLE;
  47.         DMA_initStruct.Unit = DMA_UNIT_HALFWORD;
  48.         DMA_initStruct.Count = Len_Buf/2;
  49. //        DMA_initStruct.SrcAddr = (uint32_t)&color;
  50.         DMA_initStruct.SrcAddrInc = 1;
  51.         DMA_initStruct.DstAddr = (uint32_t)&SPI1->DATA;
  52.         DMA_initStruct.DstAddrInc = 0;
  53.         DMA_initStruct.Handshake = DMA_CH0_SPI1TX;
  54.         DMA_initStruct.Priority = DMA_PRI_LOW;
  55.         DMA_initStruct.INTEn = 1;
  56.         DMA_CH_Init(DMA_CH0, &DMA_initStruct);
  57. //        DMA_CH_Open(DMA_CH0);
  58.        
  59.        
  60.         /*´ÓSPI-Flash¶ÁÈ¡*/       
  61.         /*211ÅäÖÃ*/
  62. //        DMA_InitStructure DMA_initStruct;
  63.         //SPI0 RX DMA
  64.         DMA_initStruct.Mode = DMA_MODE_SINGLE;
  65.         DMA_initStruct.Unit = DMA_UNIT_BYTE;
  66.         DMA_initStruct.Count = Len_Buf;
  67.         DMA_initStruct.SrcAddr = (uint32_t)&SPI0->DATA;
  68.         DMA_initStruct.SrcAddrInc = 0;
  69. //        DMA_initStruct.DstAddr = (uint32_t)buff;
  70.         DMA_initStruct.DstAddrInc = 1;
  71.         DMA_initStruct.Handshake = DMA_CH1_SPI0RX;
  72.         DMA_initStruct.Priority = DMA_PRI_LOW;
  73.         DMA_initStruct.INTEn = 1;
  74.         DMA_CH_Init(DMA_CH1, &DMA_initStruct);
  75.        
  76. //        DMA_CH_Open(DMA_CH0);
  77.        
  78. }
555.jpg

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

本版积分规则

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

104

主题

191

帖子

3

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