RT-Thread:STM32的PB3,PB4 复用IO配置为GPIO

文章讲述了在使用STM32F103CBT6时,如何避免PB3和PB4作为JTAG复用口导致的IO读取问题,通过STM32CubeMX配置IO功能,提供具体的配置步骤和必要的代码片段。

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

说明:在使用 STM32F103CBT6 配置了 PB3 为IO,测试时发现读取这个IO的电平时钟是0,即便单管脚上的电平是1,读取的数据任然是0,查规格书后发现PB3,PB4是JTAG复用口,要当普通IO用需要配置。

配置工具:STM32CubeMX

1.配置流程如下:

1.打开对应芯片的工程,配置PB3,PB4的IO功能

2.生成代码

3.提取相应的配置代码

文件中找到这段代码,复制到 MAIN函数中,在最开始的地方调用一次,PB3,PB4配置问题搞定。

void HAL_MspInit(void)
{
  /* USER CODE BEGIN MspInit 0 */

  /* USER CODE END MspInit 0 */

  __HAL_RCC_AFIO_CLK_ENABLE();
  __HAL_RCC_PWR_CLK_ENABLE();

  /* System interrupt init*/

  /** NOJTAG: JTAG-DP Disabled and SW-DP Enabled 
  */
  __HAL_AFIO_REMAP_SWJ_NOJTAG();

  /* USER CODE BEGIN MspInit 1 */

  /* USER CODE END MspInit 1 */
}

<think>好的,我现在需要帮用户解决如何使用STM32CubeMX配置野火霸道V1开发板驱动LCD的问题。首先,用户之前的问题是关于野火V1开发板的LCD驱动,我之前提供了硬件确认、驱动步骤和代码示例。现在用户转向CubeMX配置,需要结合之前的回答和新的引用内容。 首先,我需要回顾用户提供的引用。引用1提到MultiButton移植,可能和按键驱动有关,但用户现在的问题是关于LCD,所以可能相关性不大。引用2中用户提到自己长期依赖CubeMX,但现在想学习如何手动创建工程,基于HAL库,使用野火指南者开发板。引用3是关于给RT-Thread BSP添加外设驱动,涉及ENV工具、Kconfig和STM32CubeMX,这可能和RT-Thread系统相关,但用户现在的问题可能更偏向裸机开发,所以需要确认。 用户当前的问题是使用CubeMX配置野火霸道V1驱动LCD。根据之前的回答,霸道V1的LCD使用FSMC总线,控制芯片可能是ILI9341或ST7789V,需要确认型号。此外,背光控制引脚是普通GPIO。 接下来,我需要考虑CubeMX配置FSMC的步骤。首先,在CubeMX中选择正确的MCU型号,STM32F103VET6(假设V1使用这个)。然后配置时钟,确保HCLK足够,因为FSMC的时钟依赖于HCLK。接着,在Pinout & Configuration里配置FSMC接口。根据ILI9341的数据手册,FSMC通常使用Bank1的NOR/PSRAM,选择NE1片选,数据/命令选择使用A16地址线(RS引脚)。数据宽度16位,模式为异步模式。 然后配置FSMC参数,比如地址建立时间、数据保持时间等,这些需要根据LCD手册调整。例如,ILI9341可能需要设置Address Setup Time为1个HCLK周期,Data Setup Time为10个周期。接着,配置背光控制引脚为GPIO输出,比如PB0。 生成代码后,用户需要手动添加LCD初始化序列,这部分CubeMX无法自动生成,需要参考LCD数据手册或野火的例程。此外,用户可能需要使用HAL库的函数来读写命令和数据,比如使用HAL_SRAM_Write或直接操作FSMC的内存映射区域。 还需要注意用户之前提到的野火官方例程和库开发指南,可能需要在生成的代码中整合这些资源。例如,初始化序列可能需要从野火的示例代码中复制,并调整引脚定义。 用户可能的疑问点包括FSMC的具体配置参数是否正确,如何连接硬件引脚到CubeMX的设置,以及如何将生成的代码与现有驱动函数结合。例如,用户可能需要确认RS引脚对应的地址是否正确,或者背光控制是否配置正确。 另外,引用3中提到RT-Thread的驱动开发,如果用户是在RT-Thread环境下,可能需要使用ENV工具和Kconfig来添加驱动,但用户当前的问题可能更偏向裸机开发,因此可能需要忽略这部分,除非用户特别说明。 总结步骤:选择MCU型号,配置时钟,配置FSMC接口参数,设置GPIO,生成代码,添加初始化序列和驱动函数。需要提醒用户根据实际硬件调整参数,特别是时序和引脚连接。同时,参考野火的例程和文档来补充CubeMX生成代码的不足。</think>使用STM32CubeMX配置野火霸道V1开发板驱动LCD的步骤如下(以ILI9341控制器为例): ### 一、基础配置 1. **创建工程** - 选择MCU型号:`STM32F103VE`(霸道V1主控芯片) - 配置系统时钟树至72MHz(HCLK需满足FSMC时序要求) 2. **FSMC总线配置** ```c [CubeMX操作路径] Connectivity → FSMC → 勾选"NOR/PSRAM1" → 配置参数: Memory type: LCD Interface Data width: 16-bit Address setup time: 1 (根据LCD手册调整) Data setup time: 10 ``` *注:RS信号线对应FSMC_A16地址线[^2]* ### 二、硬件接口映射 | LCD引脚 | STM32引脚 | CubeMX配置项 | |---------|-----------|-------------------| | CS | PD7 | FSMC_NE1 | | RS | PD11 | FSMC_A16 | | WR | PD5 | FSMC_NWE | | RD | PD4 | FSMC_NOE | | D[15:0] | PE7~PE15, PD0~PD1 | FSMC_D0~D15 | | BL_CTRL | PB0 | GPIO_Output | ![FSMC LCD配置示意图](https://via.placeholder.com/600x200?text=CubeMX+FSMC+Config+Example) ### 三、关键代码生成 1. **FSMC初始化代码** CubeMX会自动生成FSMC时序配置: ```c void HAL_FSMC_MspInit(void) { __HAL_RCC_FSMC_CLK_ENABLE(); /* 自动生成GPIO复用配置 */ } ``` 2. **LCD驱动适配** 需手动添加的接口函数: ```c // 写命令函数(通过FSMC内存映射操作) #define LCD_CMD_ADDR (0x60000000) #define LCD_DATA_ADDR (0x60020000) // A16=1时选择数据寄存器 void LCD_Write_Cmd(uint16_t cmd) { *(__IO uint16_t *)LCD_CMD_ADDR = cmd; } ``` ### 四、初始化序列加载 在`main.c`中添加: ```c void LCD_Init_Sequence(void) { HAL_Delay(50); LCD_Write_Cmd(0xCF); LCD_Write_Data(0x00); LCD_Write_Data(0xC1); LCD_Write_Data(0X30); // ...完整初始化序列参考ILI9341数据手册 } ``` ### 五、验证与调试 1. **背光控制验证** ```c HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 开启背光 ``` 2. **颜色填充测试** ```c LCD_Fill(0, 0, 320, 240, 0xFFFF); // 全屏白色 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值