cubemx程序设置
然后进行时钟设置:
先从原理图找到高速晶振时钟,比如说这个为25M,
这个为8M:
OSC接外部高速晶振,用来用来产生的高速外部用户时钟,OSC32接外部低速晶振。
一般来说路线选择:
直接在HCLK里面选择板子最大主频,就会自动选择了,不一定要按上面的路线进行抉择。
选择分类别生成:
搭建程序框架
程序框架的实现
一、新增MyApplication文件夹和组
放置4个标准c文件,分别是公共文件,回调文件,系统文件,用户初始化文件,后续应用代码均放在此文件夹;
二、新增MyApplication.h文件
包含所有用户代码的头文件与外设头文件,调整外设或用户文件,只需要调整此文件内的相应头文件即可;
3、main.c文件标准化。
<iframe allow="autoplay; fullscreen" allowfullscreen="true" data-src="https://v.qq.com/txp/iframe/player.html?origin=https%3A%2F%2Fmp.weixin.qq.com&containerId=js_tx_video_container_0.683980901263491&vid=o3137gfrn6k&width=677&height=380.8125&autoplay=false&allowFullScreen=true&chid=17&full=true&show1080p=false&isDebugIframe=false" frameborder="0" height="380.8125" src="https://v.qq.com/txp/iframe/player.html?origin=https%3A%2F%2Fmp.weixin.qq.com&containerId=js_tx_video_container_0.683980901263491&vid=o3137gfrn6k&width=677&height=380.8125&autoplay=false&allowFullScreen=true&chid=17&full=true&show1080p=false&isDebugIframe=false" width="677"></iframe>三、MyApplication.h
1、此文件放置于main.c与应用代码文件中,作为头文件的集合;
2、更改处理器外设或应用代码,此文件需要相应的增加或删除相应的头文件。
四、main.c文件
1、添加头文件集合
2、添加用户初始化函数
3、标准化主循环
MyInit.Peripheral_Set();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
System.Run();
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
4、标准化错误处理函数
5、标准化断言失败处理函数
/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
System.Error_Handler();
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
System.Assert_Failed();
/* USER CODE END 6 */
}
五、system文件
1、头文件
主要定义结构体类型System_t,包含3个函数指针,分别为函数运行,系统错误处理,断言失败处理,被main.c文件调用。
2、源文件
主要定义结构体System以及3个函数,并将3个函数的名称(首地址)赋值给System结构体,完成结构体的初始化。 如此一来,main.c文件可以通过System结构体的函数指针调用System.c文件的3个函数了。
Run函数:用户应用代码;
Error_Hander函数:系统错误处理代码;
Asset_Failed函数: 断言失败处理代码。
六、Run函数
作为功能演示,简单的实现了LED1间隔1s闪烁。
public下的串口调试
头文件:
#ifndef __PUBLIC_H_
#define __PUBLIC_H_
/* Public define-------------------------------------------------------------*/
#define SoftWare_Version (float)1.0
#define huart_debug huart1
//定义枚举类型 -> TRUE/FALSE位
typedef enum
{
FALSE = 0U,
TRUE = !FALSE
} FlagStatus_t;
typedef enum
{
FAILED = 0U,
PASSED = !FAILED
} TestStatus_t;
//定义结构体类型
/* extern variables-----------------------------------------------------------*/
/*******预编译宏定义*******/
//#define Monitor_Run_Code //代码运行监控器
//#define Hardware_TEST //硬件测试
#endif
/********************************************************
End Of File
********************************************************/
c文件:
/* Includes ------------------------------------------------------------------*/
#include "MyApplication.h"
/* Private define-------------------------------------------------------------*/
/* Private variables----------------------------------------------------------*/
/* Public variables-----------------------------------------------------------*/
/* Private function prototypes------------------------------------------------*/
/*
* @name fputc
* @brief fputc映射物理串口
* @param ch->待发送字符
* @retval ch->待发送字符
*/
int fputc(int ch,FILE* f){
//通过查询的方式循环发送
HAL_UART_Transmit(&huart_debug,(uint8_t *)&ch,1,0x000A);
return ch;
}
/********************************************************
End Of File
********************************************************/
记得在头文件加上usart.h。
在vscode中要注意
在vs已经打开的mdk项目中,又重新修改了cubemx初始化的,要重新在Core里面加核心文件。我这里重新加了一个dma,所以现在要自己加进去。
标签:文件,CODE,头文件,项目,新建,System,USER,CubeMX,define From: https://www.cnblogs.com/rose24/p/18295465/cubemx-new-project-z1j7bzp