上位机图像处理和嵌入式模块部署(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();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/841236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

颜色值进制转换

颜色值进制转换 专业的和非专业程序员在编程时都碰到过颜色值的表达式。特别是在编制网页和设计界面时,都要选择颜色。各语言的颜色值表达式就两种,十六进制的颜色值hex$和十进制的RGB格式。现成的调色板颜色表也是这两种格式。写代码时会遇到写颜色值码…

打造有情感的AI智能体-情感问答

目录 文心智能体平台简介 情感问答智能体介绍 优势1主动提问深入分析你的困扰,合理建议 优势2多次主动提问,引导用户补全信息。 优势3整合多种强大工具 最近发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&#xff0c…

04.爬虫---Session和Cookie

04.Session和Cookie 1.Session2.Cookie3.详细对比4.Cookie属性结构5.一些误区 Session和Cookie是Web开发中用于用户状态管理的两种常见技术。理解它们的区别对于开发安全的Web应用至关重要。 1.Session Session代表服务器与客户端的一次会话过程。服务器端存储了Session对象&…

重生奇迹MU格斗家上手最轻松的职业

重生奇迹MU格斗家玩法攻略,有一个比较奇葩的职业,那就是格斗家。格斗家拥有其他职业没有的优势,就是加体力和敏捷都可以提升攻击力百分比。格斗家玩法攻略 目前格斗家最多的就是敏格玩法,配合智力MM加成后的幽冥光速拳可以说是第…

v-rep---script-function

作用,实现,参数讲解。 script-function标签 作用 问题:如何在插件的接口中调用lua脚本中定义的函数? 用于声明一个函数,这个函数的作用是通过v-rep提供的接口sim::callScriptFunctionEx()调用脚本的函数&#xff0…

专业的力量:在自己的领域成为专家

专业的力量:在自己的领域成为专家 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 现在稀缺的已不再是信息资源,而是运用信息的能力。过去的海…

深入了解Nodejs模块机制

深入了解Nodejs模块机制 我们都知道Nodejs遵循的是CommonJS规范,当我们require(moduleA)时,模块是怎么通过名字或者路径获取到模块的呢?首先要聊一下模块引用、模块定义、模块标识三个概念。 1 CommonJS规范 1.1 模块引用 模块上下文提供…

安装部署统信UOS服务器操作系统1070e

原文链接:安装部署统信UOS服务器操作系统1070e Hello,大家好啊!今天给大家带来一篇关于安装部署统信UOS服务器操作系统1070e的文章。统信UOS是一款基于Linux的国产操作系统,以其安全性和稳定性受到广泛关注。本文将详细介绍如何安…

58同城如何降低 80%的机器成本 | OceanBase案例

本文作者:58同城架构师刘春雷 一、背景介绍 58同城作为中国互联网生活服务领域的领军者,其平台规模居国内之首,涵盖了包括车辆交易、房产服务、人才招聘、本地生活服务以及金融等多元化的业务场景。 因其业务的广泛性和多样性,我…

Java开发大厂面试第26讲:生产环境如何排查问题和优化 JVM?

通过前面几个课时的学习,相信你对 JVM 的理论及实践等相关知识有了一个大体的印象。而本课时将重点讲解 JVM 的排查与优化,这样就会对 JVM 的知识点有一个完整的认识,从而可以更好地应用于实际工作或者面试了。 我们本课时的面试题是&#x…

本地连接github仓库

【1】新建github仓库 【2】本地克隆并提交 $ git clone https://github.com/TomJourney/soil.git Cloning into soil... warning: You appear to have cloned an empty repository.pacosonDESKTOP-E4IASRJ MINGW64 /d/github/TomJourney/soil (master) $ git add readme.txtpa…

HTML静态网页成品作业(HTML+CSS+JS)——心理健康教育介绍网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,使用Javacsript代码使用下拉菜单的实现以及首页图片的轮播&#xff0c…

windows7的ie11降级到ie8

重点是要在程序管理窗口中“查看已安装的更新”打开当前系统中已安装更新列表,找到两个IE11的更新(见下图“卸载文件“)并卸载掉,这样windows功能中的ie11才会变成ie8. 打开控制面板 进入面板,点击程序,进…

【设计模式】JAVA Design Patterns——Static Content Hosting(静态内容托管模式)

🔍目的 将静态内容部署到基于云的存储服务,该服务可以将它们直接交付给客户端。 这可以减少对昂贵计算实例的需求。 🔍解释 真实世界例子 全球性的营销网站(静态内容)需要快速的部署以开始吸引潜在的客户。为了将托管…

一个机器学习问题的重新定义

任何事物都有两面性。 一些机器学习问题也是如此。并非每个回归问题(你认为的)都需要回归。仔细考虑和审视问题的业务不仅可以帮助开发更好的模型,还可以找到有效的解决方案。 重构或重新定义(reframing)是一种改变机…

如何用ai打一场酣畅淋漓的数学建模比赛? 给考研加加分!

文章目录 数学建模比赛1. 数学建模是什么?2. 数学建模分工合作2.1 第一:组队和分工合作2.2 第二:充分的准备2.3 第三:比赛中写论文过程 3. 数学建模基本过程4. 2023全年数学建模竞赛时间轴5. 数学建模-资料大全6. 数学建模实战 数…

【feature selection】特征选择学习笔记

文章目录 1. 什么是特征选择2. 特征选择与特征提取的区别3. 特征选择的方法3.1 Filtering过滤法3.2 Wrapper包装法3.3 Embedding嵌入法 4. 特征选择示例4.1 方差选择法示例4.2 递归特征消除法示例 1. 什么是特征选择 特征选择是特征工程的内容, 其目标是寻找最优特征子集。剔除…

MTK下载AP

只升级选Firemare Upgrade ,点下载后,关机下插入USB

无人机反制:光电干扰一体设备技术详解

一、光电干扰技术原理 光电干扰技术是一种利用光学和电子技术手段对无人机实施干扰和控制的先进技术。该技术通过向无人机发射特定频率和强度的光信号或电磁信号,干扰无人机的视觉系统、控制系统或通信链路,进而达到反制无人机的目的。光电干扰技术具有…