打印
[STM32F4]

STM32F410RB HAL SPI驱动2位数码管,显示问题

[复制链接]
650|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tcdbobo|  楼主 | 2019-12-5 16:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tcdbobo 于 2019-12-9 13:56 编辑

您好,首先程序也是参考了论坛里各位前辈改的。我用的芯片是stm32f410RB,自己画的板子。也是STM32CubeMX配置的,HAL库编写,驱动2片74HC595显示2位数码管。现在的问题是,程序里写的是显示0和1.但实际效果是11.不知道是哪里的问题,把程序填上来。
/*****定义部分******/
uint8_t TX_Data[2]={0xFC,0x60};//想显示0和1
uint8_t data[]={      
       0xFC,/*0*/
       0x60,/*1*/……………….
};
uint16_t num = 0;
/****************/

/******主程序*********/
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_SPI1_Init();
while (1)
  {
   hc74959_display(num);
  }
}
/****************/

/*****595控制部分*****/
void hc74959_display(uint16_t num)
{
   {
     HAL_SPI_MspInit(&hspi1);//使能SPI1
    HAL_SPI_Transmit(&hspi1,TX_Data,2,100);            
  }
   /* 让锁存输出一个高电平脉冲 */
    HAL_GPIO_WritePin(LAT_GPIO_Port, LAT_Pin ,GPIO_PIN_SET);
   HAL_Delay(100);
   HAL_GPIO_WritePin(LAT_GPIO_Port, LAT_Pin , GPIO_PIN_RESET);
    HAL_Delay(100);
    HAL_GPIO_WritePin(LAT_GPIO_Port,LAT_Pin , GPIO_PIN_SET);                       
}
/****************/      
如下图,74HC595的Q1位有数据,Q2就不亮了。

2.JPG (51.26 KB )

2.JPG

1.JPG (71.77 KB )

1.JPG

LED原理图.JPG (128.15 KB )

LED原理图.JPG

使用特权

评论回复
沙发
mintspring| | 2019-12-5 16:55 | 只看该作者
你逐个显示一遍看看怎么变。

使用特权

评论回复
板凳
mintspring| | 2019-12-5 16:56 | 只看该作者
你让所有的都同时输出0到9,循环输出,看看效果。先确定不是电路弄错了。

使用特权

评论回复
地板
tcdbobo|  楼主 | 2019-12-6 15:08 | 只看该作者
本帖最后由 tcdbobo 于 2019-12-6 16:25 编辑
mintspring 发表于 2019-12-5 16:56
你让所有的都同时输出0到9,循环输出,看看效果。先确定不是电路弄错了。 ...

主程序里的while大循环 改了一下,直接写在里面了,不要hc74959_display(uint16_t num)子函数了。如下:
/******主程序*********/
int main(void)
{
uint8_t TX_Data[2]={0x60,0xDA,};//效果是想让2位数码管分别显示1和2
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_SPI1_Init();
while (1)
  {
    HAL_SPI_MspInit(&hspi1);

   //问题出现在这里:单独写HAL_SPI_Transmit(&hspi1,TX_Data,1,1000);第一位数码管显示1,第二位不亮,如下图1
                                单独写HAL_SPI_Transmit(&hspi1,TX_Data,2,1000);第一位数码管显示2,第二位也不亮,如下图2


    HAL_GPIO_WritePin(LAT_GPIO_Port, LAT_Pin , GPIO_PIN_RESET);
    HAL_Delay(100);
    HAL_GPIO_WritePin(LAT_GPIO_Port, LAT_Pin , GPIO_PIN_SET);
    HAL_Delay(100);        
    HAL_GPIO_WritePin(LAT_GPIO_Port, LAT_Pin , GPIO_PIN_RESET);
  }
}
/****************/

想请教一下,是哪里写的不对???我的电路图也是参考网上找的相关的2片74HC595控制4位数码管搭建的。如下图,
如下图,74HC595的Q1位有数据,Q2就不亮了。

1.JPG (71.77 KB )

1.JPG

2.JPG (51.26 KB )

2.JPG

LED原理图.JPG (128.15 KB )

LED原理图.JPG

使用特权

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

本版积分规则

22

主题

83

帖子

0

粉丝