上位机图像处理和嵌入式模块部署(f103 mcu的最小软件系统)

本文主要是介绍上位机图像处理和嵌入式模块部署(f103 mcu的最小软件系统),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        我们都知道mcu电路有最小系统。一个最小硬件系统里面包含了mcu、晶振、复位、输入和输出。其实不光硬件如此,软件也有一个最小系统。而且,不管是哪个厂家的soc,这种软件的编写都是有套路的,有一部分代码是和arm相关的,有一部分代码是mcu厂家相关的,最后剩下来的main函数和业务函数才是我们自己需要编写的。所以,大家在学习的时候,按照这个顺序去用好mcu厂家提供好的sdk就好了。

1、整体学习

        这是一个比较简单的项目结构。里面startup_stm32f103xe.s包含了系统上电时执行的第一条指令。在进入到main.c里面的main函数之前,会先调用system_stm32f1xx.c里面的SystemInit函数。

        在main函数当中,会继续调用bsp_led.c里面的LED_GPIO_Config函数,最终会实现led交替闪烁的功能。中间如果有中断的部分需要处理,直接在stm32f1xx_it.c找到入口实现就好了。

        至于STM32F1xx_HAL_Driver目录里面的内容,一般都是mcu厂家提供的。以前这部分叫标准库开发,现在叫hal库开发。本质上,都是为了让使用者聚焦于业务,忽略mcu芯片之间的差异。bsp_led中LED_GPIO_Config函数,也会调用这个目录下面的相关文件。

2、初始复位

        上电后,一般mcu就会调到Reset_Handler这个位置,

; Reset handler
Reset_Handler   PROCEXPORT  Reset_Handler             [WEAK]IMPORT  __mainIMPORT  SystemInitLDR     R0, =SystemInitBLX     R0               LDR     R0, =__mainBX      R0ENDP     

3、SystemInit函数

        SystemInit函数位于stm32f1xx.c里面,有兴趣的同学可以阅读下相关的内容。没有兴趣直接skip过去,也不是不可以。

void SystemInit (void)
{
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)#ifdef DATA_IN_ExtSRAMSystemInit_ExtMemCtl(); #endif /* DATA_IN_ExtSRAM */
#endif /* Configure the Vector Table location -------------------------------------*/
#if defined(USER_VECT_TAB_ADDRESS)SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#endif /* USER_VECT_TAB_ADDRESS */
}

4、main函数

        main函数自然处于main.c当中,大家可以去main.c文件查找,

int main(void)
{SystemClock_Config();LED_GPIO_Config();while (1){LED1( ON );			 HAL_Delay(1000);LED1( OFF );		  HAL_Delay(1000);}
}

        代码中第一个函数是配置时钟的,第二个函数是配置GPIO的,最后就是LED灯的亮和灭。

5、LED_GPIO_Config函数

        这里比较值得一说的,其实是LED_GPIO_Config函数。因为mcu里面很多的pin都是复用的,比如说哪些pin设置成gpio,哪些pin设置成输入,哪些设置成输出,这些都是需要自己设置的。当然调用的子函数,肯定来自于mcu厂家提供的sdk,因为寄存器的设计和功能的布局,只有他们自己最为清楚。

void LED_GPIO_Config(void)
{		GPIO_InitTypeDef  GPIO_InitStruct;LED1_GPIO_CLK_ENABLE();GPIO_InitStruct.Pin = LED1_PIN;	GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;  GPIO_InitStruct.Pull  = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStruct);		LED_RGBOFF;
}

        比如说,这里的HAL_GPIO_Init函数肯定就是mcu厂家提供的,我们可以跟进去一下,发现位于stm32f1xx_hal_gpio.c,这和我们之前的猜想是一致的。

6、注

        说来有点惭愧,我们买的开发板是那种最便宜的stm32f103核心板,小于10块 RMB的那种。参考借鉴的代码都是来自于野火。核心板上面比较简洁,唯一的led输出就是pc13,所以如果要用野火的程序驱动这个小核心板的话,需要改一下pin的名称,即从原来的pb5修改为pc13,

#define LED1_PIN                  GPIO_PIN_13                
#define LED1_GPIO_PORT            GPIOC                     
#define LED1_GPIO_CLK_ENABLE()   __HAL_RCC_GPIOC_CLK_ENABLE()

        此外,由于我们使用了Hal_Delay这个函数,所以时钟中断里面,一定要添加这个处理。并且,这个中断是调用SystemClock_Config之后才生效的,

void SysTick_Handler(void)
{HAL_IncTick();
}

这篇关于上位机图像处理和嵌入式模块部署(f103 mcu的最小软件系统)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004171

相关文章

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx