STM32F030软件SPI控制74HC165

本文介绍了一种使用STM32F030R8微控制器与74HC165模组进行交互的方法。通过SPI接口模拟时序来读取888路按键的状态,并记录调试过程中的关键步骤。文中提供了详细的GPIO配置及核心代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仅仅作为一个调试记录,供硬件设计使用。

环境

硬件:NUCLEO-F030R8。某宝购买的74HC165模组,接了 888 路按键。
开发环境:Win10+IAR EWARM 8.22.1

原理图

只是一个示意性的原理图,我自己不想画了,虽然图片的IO脚和主芯片不同。
在这里插入图片描述
在这里插入图片描述
我用的芯片型号为STM32F030R8。对应的实际IO接线如下:

    165侧    芯片侧
1  PL      -> PA4  SPI1_NSS
2  CP  CLK -> PB3  SPI1_SCK
9  QH  DS  -> PA6  SPI1_MISO
15 CE      -> GND

STM32CubmeMX 配置

本次使用软件模拟时序实现。

GPIO 配置

在这里插入图片描述

代码

利用 Cube 生成代码后,添加一下代码。

/*
1 PL ->      PA4  SPI1_NSS
2 CP  CLK -> PB3  SPI1_SCK
9 QH  DS  -> PA6  SPI1_MISO
*/
uint8_t HC165ReadData(void)
{
  uint8_t dat=0;
  
  HAL_GPIO_WritePin(CLK_GPIO_Port, CLK_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOA, PL_Pin, GPIO_PIN_RESET);
  HAL_Delay(1);
  HAL_GPIO_WritePin(GPIOA, PL_Pin, GPIO_PIN_SET);

  for(uint8_t i=0;i<8;i++)
  {
    dat=dat<<1;
    if (HAL_GPIO_ReadPin(GPIOA, DS_Pin)==1)
      dat=dat+1;
    
    HAL_GPIO_WritePin(CLK_GPIO_Port, CLK_Pin, GPIO_PIN_RESET);
    HAL_Delay(1);
    HAL_GPIO_WritePin(CLK_GPIO_Port, CLK_Pin, GPIO_PIN_SET);
  }
  HAL_GPIO_WritePin(CLK_GPIO_Port, CLK_Pin, GPIO_PIN_RESET);
  return ~dat;
}

我在主循环中不断读取按键信息。主循环代码如下:

  while (1)
  {
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
    //HAL_SPI_Receive(&hspi1, &cmd, 1, 1000);
    key1=HC165ReadData();
    if (key1!=0x00 && key1!=key2) {
      //有按键
      sprintf(RxBuffer, "Key is %d\n", key1);
      printf(RxBuffer);
      key2=key1;
    }
    HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

其中变量 key1 和 key2 用来保存按键数据。下面是运行串口输出。
在这里插入图片描述
注意:以上只是测试代码。工程中绝对不会这样书写。

系统完整照片

用的是杜邦线连接,有点丑。测试系统将就用一下。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的老周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值