1、include 头文件2、void SystemClock_Config(void);3、main(void){ // MCU配置 重置所有外设,初始化闪存接口和 Systick HAL_Init(); SystemClock_Config();
// 初始化所有已配置的外设 MX_GPIO_Init(); MX_TIM3_Init(); MX_USART3_UART_Init(); MX_TIM4_Init();
// 用户代码 HAL_TIM_Base_Start_IT(&htim4); eMBInit(MB_RTU, 0x01, 0, 19200, MB_PAR_NONE);//初始化modbus为RTU方式,波特率9600,奇校验 eMBEnable(); // 使能modbus协议栈
while (1) { eMBPoll(); } }
void SystemClock_Config(void){
RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** 配置主内部稳压器输出电压 */ __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); /**初始化 CPU、AHB 和 APB 总线时钟 */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 25; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 4; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** 初始化 CPU、AHB 和 APB 总线时钟 */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|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_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) { Error_Handler(); }}总结来看:
1、main作为程序的入口,其总体结构为初始化MCU+ main();
2、外设初始化配置在main()中被调用;
3、单独写功能性模块,并在main.c中调用;
来源:CSDN 原文,首次发布于 2022-11-04。