本文主要是介绍利用STM32F030软件SPI和硬件SPI控制74HC595,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
仅仅作为一个调试记录,供硬件设计使用。
环境
硬件:NUCLEO-F030R8。某宝购买的74HC595模组,包括8路继电器。
开发环境:Win10+IAR EWARM 8.22.1
原理图
只是一个示意性的原理图,我自己不想画了,虽然图片的IO脚和主芯片不同。
我用的芯片型号为STM32F030R8。对应的实际IO接线如下:
595侧 芯片侧
11 SCK 数据输入时钟线 SHCP Clock SPI2_SCK PB13
12 RCK 输出存储锁存时钟线 STCP Latch SPI2_NSS PB12
13 OE 输出使能 接地 OE GND
14 SI 数据线 DS1 DATA SPI2_MOSI PB15
STM32CubmeMX 配置
时钟配置
由于板子没有焊接晶振。配置方法如下:
配置 RCC 只是为了调试测试主频是否正确。时钟配置如下图:
硬件SPI配置
STM32F030有两路硬件SPI,都可以使用。这里我配置了SPI2。详细配置如下图:
注意:由于 595 只收不发,MISO 引脚是没有使用的。SPI 的模式可以配置为 Transmit Only Master,这样可以节约一个 IO。
代码
使用硬件 SPI 控制 74HC595 非常简单,上述配置完成后,只需要点击生成代码即可。然后在 main() 函数中添加 SPI 发送指令即可。如下:
/* USER CODE BEGIN 1 */uint8_t cmd=0xAA;/* USER CODE END 1 */.../* Infinite loop *//* USER CODE BEGIN WHILE */HAL_SPI_Transmit(&hspi2, &cmd, 1, 1000);
也就是向 74HC595 发送数据 0xAA,595 后级接继电器,就可以看到对应继电器的动作。
小结
个人以为,有硬件 SPI 支持,可以充分发挥硬件的强大作用。
软件SPI配置
软件 SPI 配置如下图:
代码
我们需要自己实现 595 发送代码。对应的代码如下:
/*
软件SPI调试正常
SHCP -> PB13
STCP -> PB12
DS1 -> PB15
//Configure GPIO pins : PB12 PB13 PB14 PB15
GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
*/
void HC595SendData(uint8_t SendVal)
{ uint8_t i; for (i=0; i<8; i++) { /*--step1、串行输入引脚,所谓串行就是使数据在一根信号线上按顺序一位一位地传输*/ if (((SendVal << i) & 0x01) != 0 ) HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);else HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);/*--step2、SHCP发生一次上升沿的时候,74HC595才会从DS引脚上取得当前的数据*/ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);HAL_Delay(100);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);} /*--step3、当移位寄存器的8位数据全部传输完毕后,制造一次锁存器时钟引脚的上升沿(先拉低电平再拉高电平)*/ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);HAL_Delay(100);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
}
注意,代码是将 PB14 配置为输出的。这个没什么影响,因为没有使用到 PB14。正确应该将 PB14 配置为输入。我懒得重新生成代码了。
系统完整照片
用的是杜邦线连接,有点丑。测试系统将就用一下。
如上图所示,继电器对应的灯已经点亮。
这篇关于利用STM32F030软件SPI和硬件SPI控制74HC595的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!