如何使用CubeMX创建STM32F105的程序
1、下载CubeMX,STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics
2、运行CubeMX
3、选择使用的MCU型号,这里选择的MCU是STM32F105RCT6
4、点Start Project开始下一步
5、选择Pinout & Configuration里的System Core里的RCC,选择使用外部高速时钟
6、在Clock Configuration中配置时钟,外部晶振选25MHz,HCLK选72MHz
7、再回到Pinout & Configuration里,进入GPIO,配置芯片引脚,将PB3-PB9和PA15配置为输出模式,默认为点电平
还使用了定时器TIM4,配置方法如下
8、设置工程的参数,选择工程保存的路径,我们后面使用keil的编译器,这里选择MDK-ARM
我习惯每个外设产生一个文件
9、最后再点击“GENERATE CODE”,就可以生成代码了
10、使用Keil软件打开生成的工程文件,还需要添加一些代码,在gpio.c文件中需要添加LED的控制函数。注意代码的添加一定要在 /* USER CODE BEGIN 2 */ 和 /* USER CODE END 2 */之间,否则下次在CubeMX中更改硬件配置后重新生成的代码将丢掉用户补充的代码。
/* USER CODE BEGIN 2 */
void LEDWork(unsigned char Status)
{if(Status & 0x01)HAL_GPIO_WritePin(LED1_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);elseHAL_GPIO_WritePin(LED1_GPIO_Port, LED0_Pin, GPIO_PIN_SET);if(Status & 0x02)HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);elseHAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);if(Status & 0x04)HAL_GPIO_WritePin(LED1_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);elseHAL_GPIO_WritePin(LED1_GPIO_Port, LED2_Pin, GPIO_PIN_SET);if(Status & 0x08)HAL_GPIO_WritePin(LED1_GPIO_Port, LED3_Pin, GPIO_PIN_RESET);elseHAL_GPIO_WritePin(LED1_GPIO_Port, LED3_Pin, GPIO_PIN_SET);if(Status & 0x10)HAL_GPIO_WritePin(LED1_GPIO_Port, LED4_Pin, GPIO_PIN_RESET);elseHAL_GPIO_WritePin(LED1_GPIO_Port, LED4_Pin, GPIO_PIN_SET);if(Status & 0x20)HAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_RESET);elseHAL_GPIO_WritePin(LED5_GPIO_Port, LED5_Pin, GPIO_PIN_SET);if(Status & 0x40)HAL_GPIO_WritePin(LED1_GPIO_Port, LED6_Pin, GPIO_PIN_RESET);elseHAL_GPIO_WritePin(LED1_GPIO_Port, LED6_Pin, GPIO_PIN_SET);if(Status & 0x80)HAL_GPIO_WritePin(LED7_GPIO_Port, LED7_Pin, GPIO_PIN_RESET);elseHAL_GPIO_WritePin(LED7_GPIO_Port, LED7_Pin, GPIO_PIN_SET);
}
/* USER CODE END 2 */
11、因为LED控制引脚有PB4和PA13原本是JTAG的引脚,我们这是用作LED的控制引脚,需要禁能JTAG,使用函数 __HAL_AFIO_REMAP_SWJ_NOJTAG(); 禁用JTAG之前还需要调用__HAL_RCC_AFIO_CLK_ENABLE();
int main(void)
{/* USER CODE BEGIN 1 */unsigned char Index = 0;/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init */__HAL_RCC_AFIO_CLK_ENABLE();/* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM4_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */__HAL_AFIO_REMAP_SWJ_NOJTAG(); //禁用JTAG/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if(Counter1000ms >= 500) {Counter1000ms = 0;LEDWork(1 << Index);if(++Index >= 8) Index = 0;}}/* USER CODE END 3 */
}
12、定时器补充代码如下,在初始化函数使能中断
/* TIM4 init function */
void MX_TIM4_Init(void)
{/* USER CODE BEGIN TIM4_Init 0 *//* USER CODE END TIM4_Init 0 */TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};/* USER CODE BEGIN TIM4_Init 1 *//* USER CODE END TIM4_Init 1 */htim4.Instance = TIM4;htim4.Init.Prescaler = 72-1;htim4.Init.CounterMode = TIM_COUNTERMODE_UP;htim4.Init.Period = 1000-1;htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(&htim4) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK){Error_Handler();}/* USER CODE BEGIN TIM4_Init 2 */HAL_TIM_Base_Start_IT(&htim4);//以中断方式启动定时器/* USER CODE END TIM4_Init 2 */}
补充中断回调函数,每1ms,Counter1000ms变量+1
/* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(++Counter1000ms > 10000) Counter1000ms = 0;
}
/* USER CODE END 1 */
13、编译后通过JLink下载,然后就可以运行了
14、最后的运行效果
CubeMX实验-点亮LED
如何使用CubeMX创建STM32F105的程序相关推荐
- 创建react应用程序_通过创建食谱应用程序来学习在React中使用API
创建react应用程序 Learn how to use external APIs with React and React Router in a full tutorial from Hamza ...
- 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序 - 强烈推荐!!!
一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序 本文根据<Professional ASP.NET MVC 1.0>中微软牛人Scott Guthrie 提供 ...
- 使用VC++6.0创建MFC对话框程序
使用VC++6.0创建MFC对话框程序
- 使用 SQL Server Mobile 创建移动应用程序
使用 SQL Server Mobile 创建移动应用程序 在此演练中,您将学习如何在使用 SQL Server 2005 Mobile Edition (SQL Server Mobile) 的 ...
- 微信公众号可快速创建“门店小程序” 不用开发
"门店小程序"是啥?"门店小程序"是小程序的一项新能力.无需开发,商户就可在微信公众号后台快速创建"门店小程序".这个小程序类似一张&quo ...
- 第二章 第三节 创建第一个程序
第三节 创建第一个程序 返回目录 启动Eclipse的时候,您会看到工作区(workspace),它是工程的容器.在初始的工作区中没有任何工程,如图2-2. 图2-2 Eclipse主窗口 没有工程 ...
- 【Visual Studio 2019】创建 MFC 桌面程序 ( 安装 MFC 开发组件 | 创建 MFC 应用 | MFC 应用窗口编辑 | 为按钮添加点击事件 | 修改按钮文字 | 打开应用 )
文章目录 一.安装 MFC 开发组件 二.创建 MFC 应用 三.MFC 应用窗口编辑 四.为按钮添加点击事件 五.修改按钮文字 六.打开系统其它应用 七.博客源码 一.安装 MFC 开发组件 打开 ...
- 微信门店小程序怎样创建 门店小程序创建方法简介
微信门店小程序怎样创建 门店小程序创建方法简介 微信门店小程序是什么东西?门店小程序要怎样创建?还不清楚微信门店小程序详情的小伙伴们抓紧时间跟上小编一起来看一下吧! 门店小程序是什么? 微信发 ...
- 你不得不知道的Visual Studio 2012(3)- 创建Windows应用程序
创建项目 在Visual Studio中创建一个应用程序,应首先创建一个项和一个解决方案.在此示例中,您将创建Windows presentation foundation应用程序. 创建 WPF 项 ...
最新文章
- 九章算法【总结】Java 搞定链表-面试常考题目精选
- ThreadLocal模式的一点小理解
- Android开发 ShapeDrawable详解
- 分布式系统开发注意事项
- java 画笔跟swing组件_Java学习教程(基础)--Java版本历史(二)
- springmvc环境搭建以及常见问题解决
- 搜索推荐广告中的Position Bias:美团DPIN
- 图像形状特征(七)--Zernike矩
- 23andme、gsa、wegene各染色体位点统计
- Laravel使用腾讯云COS服务
- DSS与Schedulis的集成安装教程(单机)
- 在LaTeX中添加Visio绘图
- 视频教程-教你编写人工智能程序教程(自学必看)-Python
- 红米note3android驱动,红米Note3手机驱动
- 查询学生的学号、课程号和成绩,并按成绩升序排序
- 偷偷看了同事的代码找到了优雅代码的秘密
- 热乎乎的宇宙头条校招前端面经
- css table自适应斜线
- 3500双休和4000单休,你选哪个?
- 促销活动的2个环节与7个关键点