stm32f405rgt6全例程
时间: 2025-02-21 09:29:15 浏览: 85
### STM32F405RGT6 完整示例程序
对于STM32F405RGT6而言,构建一个完整的示例程序通常涉及初始化硬件资源、配置GPIO端口以及实现基本的功能模块。这里将以串口通信为例展示如何编写一个简单的全例程[^2]。
#### 初始化系统时钟
首先,在任何外设操作之前都需要设置系统的主频:
```c
void SystemClock_Config(void){
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/* 配置HSE */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
/* 设置PLL作为系统时钟源并配置倍频系数 */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
}
```
#### GPIO与USART初始化函数
接着是对用于UART接口的GPIO引脚进行配置,并开启对应的USART外设:
```c
static void MX_GPIO_Init(void)
{
__HAL_RCC_GPIOD_CLK_ENABLE();
// UART TX/RX Pin configuration
GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 复用推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不使能上下拉电阻
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART2; // USART2 Alternate Function
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}
static void MX_USART2_UART_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart2) != HAL_OK)
{
Error_Handler();
}
}
```
#### 主循环中的数据发送接收处理逻辑
最后是在`main()`函数里完成实际的数据传输工作:
```c
int main(void)
{
HAL_Init(); // 初始化HAL库
SystemClock_Config(); // 系统时钟配置
MX_GPIO_Init(); // GPIO初始化
MX_USART2_UART_Init(); // USART初始化
char tx_data[]="Hello World!";
while(1){
HAL_UART_Transmit(&huart2,(uint8_t*)tx_data,strlen(tx_data),HAL_MAX_DELAY);
HAL_Delay(1000); // 延迟一秒再发一次消息
}
}
```
以上就是基于STM32CubeMX框架下的一个简单而完整的串口通讯实例代码片段。该例子展示了从硬件资源分配到具体应用层面上的操作流程。
阅读全文
相关推荐


















