STM32 GPIO引脚PB3 PB4配置为正常IO口输出 hall库版

void lcd_GPIO_init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;

    __HAL_RCC_GPIOB_CLK_ENABLE();           // 使能GPIOB时钟
    __HAL_RCC_AFIO_CLK_ENABLE();            // 使能AFIO时钟
    __HAL_AFIO_REMAP_SWJ_NOJTAG();          // 关闭 JTAG 功能
    
    /* GPIOB3,B4初始化设置 */
    GPIO_InitStructure.Pin    = GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5;
    GPIO_InitStructure.Mode   = GPIO_MODE_OUTPUT_PP;          //推挽输出
    GPIO_InitStructure.Pull   = GPIO_NOPULL;                  //无上下拉
    GPIO_InitStructure.Speed  = GPIO_SPEED_FREQ_MEDIUM;         //72MHz
    HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);                //GPIOB初始化

    SID(1);
    SCLK(1);
    RST(1);
}

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的软件模拟 SPI 的例程。 首先,您需要在 CubeMX 中将这些引脚配置GPIO,并将它们设置为输出模式。然后,您可以按照以下方式编写软件模拟 SPI 的代码: ```c #define SPI_CLK_PIN GPIO_PIN_12 #define SPI_MISO_PIN GPIO_PIN_13 #define SPI_MOSI_PIN GPIO_PIN_15 #define SPI_CS_PIN GPIO_PIN_14 #define SPI_GPIO_PORT GPIOB void spi_init(void) { // 配置 SPI 引脚输出模式 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = SPI_CLK_PIN | SPI_MISO_PIN | SPI_MOSI_PIN | SPI_CS_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(SPI_GPIO_PORT, &GPIO_InitStruct); // 设置 SPI 引脚初始状态 HAL_GPIO_WritePin(SPI_GPIO_PORT, SPI_CLK_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(SPI_GPIO_PORT, SPI_MISO_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(SPI_GPIO_PORT, SPI_MOSI_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(SPI_GPIO_PORT, SPI_CS_PIN, GPIO_PIN_SET); } void spi_write_byte(uint8_t data) { // 先置位片选信号 HAL_GPIO_WritePin(SPI_GPIO_PORT, SPI_CS_PIN, GPIO_PIN_RESET); for (int i = 7; i >= 0; i--) { // 先将时钟线置为低电平 HAL_GPIO_WritePin(SPI_GPIO_PORT, SPI_CLK_PIN, GPIO_PIN_RESET); // 根据要发送的数据位,设置 MOSI 引脚的电平 if (data & (1 << i)) { HAL_GPIO_WritePin(SPI_GPIO_PORT, SPI_MOSI_PIN, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(SPI_GPIO_PORT, SPI_MOSI_PIN, GPIO_PIN_RESET); } // 将时钟线拉高,让数据线上的数据被读取 HAL_GPIO_WritePin(SPI_GPIO_PORT, SPI_CLK_PIN, GPIO_PIN_SET); } // 置位片选信号 HAL_GPIO_WritePin(SPI_GPIO_PORT, SPI_CS_PIN, GPIO_PIN_SET); } ``` 这个例程中,我们定义了需要使用的 SPI 引脚以及它们所在的 GPIO。在 `spi_init()` 函数中,我们将这些引脚配置输出模式,并将它们的初始状态设置为特定的电平。在 `spi_write_byte()` 函数中,我们使用一个循环来逐位发送数据。我们将 MOSI 引脚的电平根据数据位的值设置为高或低,并在每个数据位发送前将时钟线拉低。在发送完整个字节后,我们将片选信号置为高电平。 请注意,这只是一个简单的例程,不包括任何错误检查或其他高级功能。如果您需要在实际应用中使用该代码,请根据需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值