[STM32WB] 【STM32WBA52CG测评】+点阵模块的显示驱动

[复制链接]
 楼主| jinglixixi 发表于 2023-7-11 12:29 | 显示全部楼层 |阅读模式
<
本帖最后由 jinglixixi 于 2023-7-11 12:38 编辑

#申请原创#
本打算先以I2C接口的OLED屏掌握第一个测试目标,无奈的是几经能力也没能成功,只好更换目的那点阵模块来测试一番。还别说,尽管它比OLED屏要多占用一个GPIO口,且它的能耗也比OLED屏要高,但它还是不负期待地被点亮了!

为了便于连接,所使用的引脚均由Arduino接口连接,点阵模块与开发板的具体连接关系为:
sda---pb4
cs ---pb3
scl---pa15

1.jpg
图1 使用接口

为使所用引脚输出高低电平其定义语句为;
#define DIN_SetHigh()  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4,GPIO_PIN_SET)
#define DIN_SetLow()   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET)

#define CS_SetHigh()   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3,GPIO_PIN_SET)
#define CS_SetLow()    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3,GPIO_PIN_RESET)

#define CLK_SetHigh()  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15,GPIO_PIN_SET)

#define CLK_SetLow()   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15,GPIO_PIN_RESET)

该点阵模块所采用的芯片为Max7219,其所用引脚的配置函数为:
  1. void max7219_GPIO_Init(void)
  2. {
  3. __HAL_RCC_GPIOB_CLK_ENABLE();
  4. GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  5. GPIO_InitStruct.Pull  = GPIO_NOPULL;
  6. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  7. GPIO_InitStruct.Pin = GPIO_PIN_4;
  8. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  9. GPIO_InitStruct.Pin = GPIO_PIN_3;
  10. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  11. __HAL_RCC_GPIOA_CLK_ENABLE();
  12. GPIO_InitStruct.Pin = GPIO_PIN_15;
  13. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  14. }

Max7219发送字节数据的函数为:
  1. void Write_Max7219_byte(char DATA)
  2. {
  3.    char i;
  4.    CS_SetLow();
  5.    for(i=8;i>=1;i--)
  6.    {
  7.      CLK_SetLow();
  8.      if(DATA&0x80)
  9.           DIN_SetHigh();
  10.      else
  11.           DIN_SetLow();
  12.      DATA=DATA<<1;
  13.      CLK_SetHigh();
  14.    }
  15. }

Max7219向指定寄存器发送数据的函数为:
  1. void Write_Max7219(char address,chardat)
  2. {
  3.      CS_SetLow();
  4.      Write_Max7219_byte(address);
  5.      Write_Max7219_byte(dat);
  6.      CS_SetHigh();
  7. }

Max7219的初始化函数为:
  1. void Init_MAX7219_D(void)
  2. {
  3.    Write_Max7219(0x0b, 0x07);
  4.    Write_Max7219(0x0c, 0x01);
  5.    Write_Max7219(0x0f, 0x00);
  6. }

为进行测试,其主程序为:
  1. int main(void)
  2. {
  3. unsigned int i,k,j=0;
  4. HAL_Init();
  5. SystemClock_Config();
  6. MX_GPIO_Init();
  7. MX_ICACHE_Init();
  8. max7219_GPIO_Init();
  9. Init_MAX7219();
  10. while(1)
  11. {
  12.        for(j=0;j<38;j++)
  13.        {
  14.           for(i=1;i<9;i++)
  15.           {
  16.                             Write_Max7219(i,disp[j][i-1]);
  17.                             HAL_Delay(40);
  18.            }
  19.            HAL_Delay(200);
  20.        }
  21. }
  22. }

经程序的编译和下载,其显示效果如图2至图4所示。
3.jpg
图2 显示数字

2.jpg
图3 显示字符

4.jpg
图4 显示中文

视频演示:



gejigeji521 发表于 2024-1-12 16:57 | 显示全部楼层
Max7219我记得是SPI接口啊。用IO模拟效率低了。可以用SPI+DMA
 楼主| jinglixixi 发表于 2024-1-12 21:40 | 显示全部楼层
gejigeji521 发表于 2024-1-12 16:57
Max7219我记得是SPI接口啊。用IO模拟效率低了。可以用SPI+DMA

效率低可能低些,但通用性强。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

518

主题

2933

帖子

39

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