C语言程序设计之STM32,在这里轻松学习嵌入式编程

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!


开发板实物图

上图是我购买的一块STM32的开发板,大家可以发现这块开发板是由一块STM32主芯片和很多个外部设备组成的,有大家熟悉的USB、SD卡电源接口等,等还有大家以前没有了解过的一些外设。也就是我以前和大家讲过的大脑和手脚,这样才能形成一个体系,如果只有MCU,那么它如何去执行任务呢?如果只有外设,那么谁去控制它们执行呢?管理者和执行者缺一不可。

在学习编程之前,让我们先来了解一下STM32的内部结构。

STM32晶振

每一款芯片都有晶振,晶振又称为是MCU的“心脏”,不是通上电MCU就可以正常运行了,是晶振推动程序的执行的,这一点大家要注意,STM32不响51单片机只有一个晶振,我选的这一款芯片有5个时钟源,为什么它需要这么多时钟源呢?是为了适应自带的一些设备,有的设备需要高频的时钟,而有些低频的就可以满足它们的使用要求了,如果都使用高频的,那么就会浪费大量的能量,做过产品的同学肯定知道一个产品的功效是很严格的,特别是出口产品,如果功效不达标,也就是造成能源的浪费是无法进行销售的,这会造城很大的损失。所以这也是STM32在控制领域火爆的原因,它能很好地控制功效,也就是所谓的低功耗。

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

STM32功能选择

我一开始学习的时候就有一个疑问,开发板的引脚就那么多,为什么能实现那么多功能呢?之后我才明白,STM32自带了很多强大的功能,但是引脚的数量有限,所以很多时候它们都是共用一些引脚,但是里面有个功能选择器,我们想使用哪个功能时,就设置功能选择器,这时他就会打通相应通道,并且关闭其他通道。这样就实现了功能的多样性。

前一段时间和大家讲过了,MCU是如何控制这些功能的,MCU中有很多地址,它是通过控制这些地址所对的数据从而实现控制设备的,这些地址对应的就是功能,这些地址所对应的内容也被称为寄存器。但是如果直接去控制寄存器步骤会很繁琐,每实现一个功能就要配置很多寄存器,量大而且容易配置出错,所以这些芯片的的厂家为了方便大家编程,封装了很多库函数,库函数实现了很多功能初始化的分装,我们只要简单调用他们就能配置好所要使用的寄存器了,但是寄存器还是建议大家学习一下的,因为那样才能真正了解芯片的工作原理。给大家实现一个简单的程序,点亮一个LED灯,这个真的是嵌入式中最简单的程序了,就好比你伸手去开个灯那么简单。我用寄存器和库函数各实现一下个大家看看。

C

寄存器版本:

#define LED PFout(8) // 定义LED为相应的管脚

void LED_Init(void) //初始化函数

{

RCC->AHB1ENR|=1<<5; //使能管脚时钟

GPIO_Set(GPIOF,PIN8,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PD); //配置管脚功能

LED=0;//关闭LED灯 ,LED做过宏定义,要自己去定义LED代表管脚

}

int main(void) //主函数

{

Stm32_Clock_Init(336,8,2,7); //配置时钟

LED_Init(); //初始化LED

LED=1; //点亮LED

}

库函数版本:

void LED_Init(void) //初始化函数

{

GPIO_InitTypeDef GPIO_InitStructure; //定义管脚

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//打开管脚时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //选择是第几号管脚

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //配置管脚为输出

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //配置管脚为推挽方式

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //配置管脚输入输出频率为100MHz

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //配置管脚为下拉电阻

GPIO_Init(GPIOF, &GPIO_InitStructure); //初始化管脚,按照上述配置

GPIO_ResetBits(GPIOF,GPIO_Pin_8); //·将输出置为0,关闭LED灯

}

int main(void) //主函数

{

LED_Init(); //初始化LED

GPIO_SetBits(GPIOF,GPIO_Pin_8); //将输出置为1,打开LED灯

}

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

看了上述方式,很多人就说库函数配置那么复杂,明明就是寄存器版本好,其实用过之后你就会发现,库函数配置都是有规律的,而寄存器的的配置都是没有章法可循的,因为设备的多样性,要配置的也是千差万别。但是寄存器执行要比库函数执行效率高,你要问我为什么?因为库函数等于多了一个步骤,你是调用人家的函数,人家的函数是对寄存器的配置,所以速度显而易见,当然一般是感觉不出来的,除非是一丁点时间都不容易许浪费的设备。

STM32

好了今天就介绍到这里,从今天开始,我们也正式开始学习STM32了,以后的日子还望大家一起努力,觉得写的还行的帮忙点个赞呗,不好的还望提出意见和批评,谢谢大家了。

这些是C/C++能做的

服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容