打印
[STM32WB]

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

[复制链接]
418|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2023-7-11 12:38 编辑

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

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

图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,其所用引脚的配置函数为:
void max7219_GPIO_Init(void)
{
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull  = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pin = GPIO_PIN_4;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_15;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

Max7219发送字节数据的函数为:
void Write_Max7219_byte(char DATA)
{
   char i;
   CS_SetLow();
   for(i=8;i>=1;i--)
   {
     CLK_SetLow();
     if(DATA&0x80)
          DIN_SetHigh();
     else
          DIN_SetLow();
     DATA=DATA<<1;
     CLK_SetHigh();
   }
}

Max7219向指定寄存器发送数据的函数为:
void Write_Max7219(char address,chardat)
{
     CS_SetLow();
     Write_Max7219_byte(address);
     Write_Max7219_byte(dat);
     CS_SetHigh();
}

Max7219的初始化函数为:
void Init_MAX7219_D(void)
{
   Write_Max7219(0x0b, 0x07);
   Write_Max7219(0x0c, 0x01);
   Write_Max7219(0x0f, 0x00);
}

为进行测试,其主程序为:
int main(void)
{
unsigned int i,k,j=0;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ICACHE_Init();
max7219_GPIO_Init();
Init_MAX7219();
while(1)
{
       for(j=0;j<38;j++)
       {
          for(i=1;i<9;i++)
          {
                            Write_Max7219(i,disp[j][i-1]);
                            HAL_Delay(40);
           }
           HAL_Delay(200);
       }
}
}

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

图3 显示字符

图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

效率低可能低些,但通用性强。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2675

帖子

37

粉丝