51程序移植到stm32f103
更多
将51单片机(如STC89C52)的程序移植到STM32F103(Cortex-M3内核)时,由于两者架构差异较大,需进行系统性调整。以下是关键步骤和注意事项:
1. 硬件层差异处理
- 时钟系统
STM32F103时钟源更复杂(HSI/HSE/PLL),需通过RCC寄存器或STM32CubeMX配置时钟树(如72MHz主频)。 - GPIO
51的IO操作(如P1=0xFE;)需替换为STM32库函数:// STM32 示例 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // PA0置低 - 中断系统
51的中断向量(如void Timer0_ISR() interrupt 1)需改为STM32的中断服务函数:// STM32 定时器中断示例 void TIM2_IRQHandler(void) { if (__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_UPDATE)) { // 中断逻辑 __HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE); } }需在
stm32f1xx_it.c中注册中断,并通过HAL_NVIC_SetPriority()设置优先级。
2. 代码移植策略
- 保留核心逻辑
算法、状态机等与硬件无关的代码可直接复用。 -
重写外设驱动
替换51的寄存器操作为STM32标准库/HAL库函数:// 51的UART发送 void UART_SendByte(char c) { SBUF = c; while (!TI); TI = 0; } // STM32替换为HAL库 HAL_UART_Transmit(&huart1, (uint8_t*)&c, 1, 100); - 调整数据类型
注意int在51中为16位,在STM32中为32位,必要时使用uint16_t等标准类型。
3. 开发环境配置
- 工具链
从Keil C51切换到Keil MDK-ARM或STM32CubeIDE,安装STM32F1支持包。 - 工程配置
使用STM32CubeMX生成初始化代码(时钟、外设、中断),减少手动配置错误。 - 烧录调试
改用ST-Link或J-Link,通过SWD接口下载程序。
4. 外设功能对照表
| 51外设 | STM32F103对应实现 |
|---|---|
| 定时器/计数器 | TIM1-TIM4(支持PWM、编码器等) |
| UART | USART1-USART3 |
| SPI/I2C | 硬件SPI/I2C或软件模拟 |
| 外部中断 | EXTI + NVIC优先级管理 |
5. 调试与优化
- 分模块验证
先移植GPIO、定时器等基础功能,再逐步添加复杂外设。 - 利用调试工具
使用Keil或STM32CubeIDE的实时调试功能(断点、变量监控、内存查看)。 - 资源优化
STM32F103 Flash/RAM较大,但需注意堆栈大小(修改startup_stm32f103xe.s中的堆栈配置)。
示例:LED闪烁代码对比
// 51代码
#include <reg52.h>
void main() {
while(1) {
P1 = 0x00; // LED亮
delay(1000);
P1 = 0xFF; // LED灭
delay(1000);
}
}
// STM32代码(HAL库)
#include "stm32f1xx_hal.h"
int main() {
HAL_Init();
SystemClock_Config();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef gpio;
gpio.Pin = GPIO_PIN_5; // PA5(LED)
gpio.Mode = GPIO_MODE_OUTPUT_PP;
gpio.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &gpio);
while(1) {
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(1000);
}
}
注意事项
- 电源管理:STM32需配置正确的电源模式(如
VDD=3.3V)。 - 复位电路:检查复位引脚(NRST)是否稳定。
- Boot模式:确保BOOT0/BOOT1引脚配置正确(通常BOOT0接地)。
通过以上步骤,可逐步完成从51到STM32F103的移植,充分利用STM32的高性能特性(如DMA、硬件PWM等)优化原有设计。
TencentOS tiny 移植到STM32F103全教程(基于标准库)
TencentOS tiny 移植到STM32F103全教程(基于标准库)
资料下载
申根换
2021-11-23 18:06:57
将FreeRTOS移植到STM32F103中的步骤
目录一、FreeRTOS的介绍二、将FreeRTOS移植到STM32F103中的步骤1.前期准备2.在MDK下
2021-08-24 07:26:54
7天热门专题
换一换
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机