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

环境

硬件: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 用来保存按键数据。下面是运行串口输出。

注意:以上只是测试代码。工程中绝对不会这样书写。

系统完整照片

用的是杜邦线连接,有点丑。测试系统将就用一下。

STM32F030软件SPI控制74HC165相关推荐

  1. FPGA进阶篇--SPI控制双通道16bit串行DAC8532

    文章目录 一.芯片手册关键点笔记 1.时序 2.寄存器 二.FPGA控制DAC8532驱动 DAC8532_drive_project DAC8532_DATA_Ctrl模块: spi_data_tr ...

  2. 【51单片机快速入门指南】5.3:SPI控制晶联讯JLX12864G_08602 LCD屏幕

    目录 示例程序 JLX12864G_08602.c JLX12864G_08602.h JLX12864G_08602_Font.c JLX12864G_08602_Font.h 测试程序 main. ...

  3. 【51单片机快速入门指南】5:软件SPI

    目录 硬知识 SPI协议简介 SPI接口介绍 SPI接口连接图 SPI数据传输方向 SPI传输模式 软件SPI程序源码 Soft_SPI.c Soft_SPI.h 普中51-单核-A2 STC89C5 ...

  4. 【51单片机快速入门指南】2.4:74HC595、LED点阵屏及其SPI控制

    目录 硬知识 IO 口扩展方式-串转并 74HC595 芯片介绍 硬件设计 测试源码 HC74595.c HC74595.h main.h 实验现象 SPI控制 普中51-单核-A2 STC89C52 ...

  5. STM-32:SPI通信协议/W25Q64简介—软件SPI读写W25Q64

    目录 一.SPI简介 1.1电路模式 1.2通信原理 1.3SPI时序基本单元 1.3.1起始和终止 1.3.2交换字节 二.W25Q64 2.1W25Q64简介 2.2W25Q64硬件电路 2.3W ...

  6. STM32硬件SPI控制TM1638 按键数码管LED显示模块

    STM32硬件SPI控制TM1638按键数码管LED显示模块   从淘宝买来的,TM1638专门是控制LED的,LED组合起来就可以变成数码管,还有按键,这个我就没管了,不想管了,发这个帖子只是为了记 ...

  7. 硬件SPI控制ST7789V

    文章目录 前言 一.能用的方法有那些? 1.利用硬件UART模拟SPI,实现9位数据发送 2.搭建一个数字逻辑电路,人为实现9位spi发送 3.发送两组8位SPI 二.具体操作 1.具体实现 总结 前 ...

  8. STM32F103C8T6硬件SPI控制6针/7针0.96寸OLED显示屏

    OLED介绍 OLED主要参数 1.高分辨率:12864(和12864LCD相同分辨率,但该OLED屏的单位面积像素点多). 2.广可视角度:大于160°. 3.低功耗:正常显示时0.04W. 4.宽 ...

  9. GD32F303调试小记(二)之SPI(软件SPI、硬件SPI、硬件SPI+DMA)

    前言 目前有一个项目中用到了TFT-LCD,其驱动芯片为ILI9341.为更好的达到显示效果,在最终的代码中我们会使用单片机自带的硬件SPI+DMA模块(由于调试过程中SPI+DMA输出的波形没能驱屏 ...

最新文章

  1. 使用opencv训练目标检测模型基于cascade模型
  2. IListT和ListT区别
  3. 无法定位软件包 docker-ce_初三一模考试结束后,如何准确给孩子定位,平衡自招和裸考的关系...
  4. 指数基金日涨跌幅python_看懂巴菲特推荐的指数基金定投,Python验证
  5. EF学习杂记39:如何重置Relationships
  6. JScript 和 VBscript访问网络上的打印设备
  7. linux脚本 sed,Linux脚本利器sed
  8. go-import下划线的作用
  9. RubikFX:用JavaFX 3D解决魔方难题
  10. L3-016 二叉搜索树的结构 (30 分)
  11. FastDFS搭建文件服务器
  12. python批量下载抖音视频_Python一键批量下载抖音无水印视频
  13. mysql分区数据覆盖_彻底搞懂MySQL分区
  14. 计算机技术 安防 工程师考试,信息安全工程师考试科目有哪几门
  15. 沉船会有什么_泰坦尼克号沉船之谜
  16. [机器学习与数据分析] 数据分析常用方法
  17. stm32中的或运算 ||
  18. 《速度与激情9》中有哪些槽点?
  19. 自媒体运营之【流量的价值】
  20. 图像金字塔实现图像缩放_一个简单的VueJS组件,用于图像放大/产品缩放

热门文章

  1. 用Ruby on Rails实现适应各种平台的在线Office文档预览
  2. 中国的因特网低谷 ---- 2000:从希望云端到幻灭低谷
  3. 成为合格插画设计师的要点
  4. HNUCM—第14届蓝桥杯CC++组选拔赛
  5. Elementui删除表格最后一页全部数据后跳到前一页的骚气写法
  6. 杭电多校第七场 1011 Kejin Player HDU(6656)
  7. Socket基础八:网络IO模型的应用
  8. Python学习0——基础知识1
  9. DMOZ重新接受登录申请(转)
  10. html5 plus 支付,h5+ app 第三方支付调用步骤