C语言很差, 学STM32会不会很难, 这也许是你的方法不对

日期:2019-10-09 20:25:32   来源:互联网   编辑:小优   阅读人数:971

C语言很差, 学STM32会不会很难, 这也许是你的方法不对(图1)

这篇文章是紧接着上一篇的后续。

疑问二、我C语言那么差学起来会不会很难?

很多人都觉得,我的C语言那么烂,学STM32会不会很难。曾经的我也有这样的想法,那是因为还没真正的了解STM32的软件编程。

用于STM32编程的语言有三种分别是汇编,C语言和C++。其实每一个STM32程序项目都使用了汇编,STM32的配置文件就是使用汇编语言编写的,但是平时我们做的时候一般不用去管他,平时使用最多得的还是C语言,C++的也有但很少人用。STM32的方式也是有三种分别是寄存器方式,库函数方式和寄存器库函数混合方式。8051的单片机就是以寄存器的方式来编程的。而STM32其实也都是以寄存器的方式来编程的,但是STM32芯片内有几百个寄存器,如果以这种方式来的话,每次都要找资料查看每一个寄存器的配置方法。这样的话效率就慢了许多,所以就有了库函数的方式。什么是库函数?先解释什么是函数吧,函数也是C语言的一个知识点,当初我在学C语言的时候,一开始我也不知道什么是函数,也许是老师没说清楚,所以不理解,如果理解了就知道C语言中的函数也不过如此。下面举几个例子就明白了。比如说现在有两个未知数x1和x2我要把两个数相乘再加10。用数学表达就是:x1*x2+10=结果

不用函数的写法:

Void main(void)

//先定义一个变量,用来保存计算结果

Int n=0。

n=x1*x2+10。

用函数的写法:

先定义一个函数,函数的作用是要计算两个未知数。得到结果。那么就要函数返回一个数。

函数为:

int jisuan(int x,inty)

return x1*x2+10。

//主函数,就是程序运行的开始。

void main(void )

Int n=0; //定义一个变量用来保存结果

n=jisuan(x1,x2) //这是函数的调用,这样就得到结果了。

用函数的好处就是,我不需要知道你里面的计算过程,我只要知道我把值放进去就可以得到我需要的结果了。

在C语言中经常会用到printf;函数,这个函数的作用就是可以把我们想要知道的东西输出又或者叫打印。你知道怎么去用这个函数,但是你不用知道它里面做了什么事情,就是这个道理。

回到之前哪里,所谓的库函数就是把配置不同的寄存器的过程代码用函数包装起来,把这些函数整理到一个文件里面就成了库。就叫库函数。

以这种方式,虽然看起来代码很多,但是很多东西都是有固定的一些参数,并不需要我们自己去想。给一个STM32引脚配置的例子就知道了:

void LED_Init(void)//这是一个函数,作用是把STM32使用到的引脚配置的代码段包装起来。

//这是一个声明,跟其他的哪些变量声明是一样的。

GPIO_InitTypeDef GPIO_InitStructure。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOARCC_APB2Periph_GPIOD, ENABLE)//使能PA,PD端口时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0--PA.8 端口配置

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz

GPIO_Init(GPIOA,GPIO_InitStructure) //根据设定参数初始化

GPIO_SetBits(GPIOA,GPIO_Pin_8) //PA.8 输出高

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1--PD.2 端口配置, 推挽输出

GPIO_Init(GPIOD,GPIO_InitStructure) //推挽输出 ,IO口速度为50MHz

GPIO_SetBits(GPIOD,GPIO_Pin_2) //PD.2 输出高

上面这段代码的内容都不用自己写,把其他地方的复制过来把参数更改一下就可以了。下面这段代码就是整个实验的运行代码:

int main(void)

delay_init; //延时函数初始化,就是一些配置的代码段。

LED_Init; //这个就是上面的那个函数,在这里使用,高大上的叫法叫函数的调用,代码运行到这里的话就会跑到上面哪里运行哪些代码段

while(1)

LED0=0。

LED1=1。

delay_ms(300) //延时300ms

LED0=1。

LED1=0。

delay_ms(300)//延时300ms

所以说真正自己要写的其实很少。不要被他的外观所欺骗了,以为C语言差很难学。

我觉得知道以下几个C语言的知识点就可以完成基础的STM32的实验:

要知道C语言执行的开端。所有的C语言程序都包含main函数(什么是函数待会再解释)无论多么复杂的程序都是从main函数开始执行。所以我们在看一段代码的时候可以先从main函数开始一步一步往下看,就知道它走的每一步都做了什么事情。

要知道C语言量意思。无非就是常量跟变量,而常用的变量就是整型(int)字符型(char)浮点型(float)这几个。其实知道有这个东西就可以了,多用几遍记住了。

C语言在于理解,不在于死记硬背。学好C语言就像玩一个闯关游戏,你首先要先了解一下规则,就尽情的闯关,一开始输了,没关系,从新再来,因为你有无数次复活的机会。

学好STM32也是在于理解,理解别人怎么使用哪些库函数。要理解配置的完整流程。很多的STM32都不是闭卷考试,所以都是可以相互参考,相互复制。

本文相关词条概念解析:

C语言

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSIC,作为C语言最初的标准。C语言之所以命名为C,是因为C语言源自KenThompson发明的B语言,而B语言则源自BCPL语言。

网友评论
电一辅助三
如果按照传统的就业优势而言,或许女孩更适合学习经济类、艺术类、语言类、医药护理类、管理类、法学类等专业
2019-10-19 05:16 374
烟花的表演
这对你的学习和就业恐怕没有什么好处吧
2019-10-21 02:33 881
记几说自己
该方式可以实现在线调试,提高了查找问题的效率
2019-10-21 06:32 407
xj18036959
这种烧录方式可以通过JLINK、STLINK等工具实现
2019-10-22 11:25 412
江南小秀才
该方式下载程序虽然方便,但是无法实现在线调试
2019-10-16 08:15 229
相关阅读
娱乐圈九大隐形富豪,杜海涛、薛之谦上榜,而他隐藏得最深!

娱乐圈九大隐形富豪,杜海涛、薛之谦上榜,而他隐藏得最深!

看了无数次的云,行过许多地方的路,才领悟到人生一切都是过眼云

网友晒收款短信:60万参投《哪吒》获利1800万?片方回应来了

网友晒收款短信:60万参投《哪吒》获利1800万?片方回应来了

据最新票房统计显示,该目前的总票房超过49亿,不算宣发成本,

老北京早餐攻略,关于老北京早餐店的介绍

老北京早餐攻略,关于老北京早餐店的介绍

一日三餐中最重要的一餐莫过于早餐。这早餐的重要性不言而喻。而

零下30度的东北,当地人都在吃啥?看完长见识了

零下30度的东北,当地人都在吃啥?看完长见识了

北是中国的极寒之地,到了冬天最低温度可达零下30度。这么冷的

高云翔性侵案进入最后庭审,董璇未露面,二人已无共同持股公司 前妻董璇被称“原谅教教主” 曾成批卖奢侈品,300万澳元赎夫 唐德影

高云翔性侵案进入最后庭审,董璇未露面,二人已无共同持股公司 前妻董璇被称“原谅教教主” 曾成批卖奢侈品,300万澳元赎夫 唐德影

作者 市界 何珊珊10月21日,据多家媒体报道,高云翔与王晶

买莲藕时,教你区分“脆藕”和“粉藕”的小技巧,别买错了

买莲藕时,教你区分“脆藕”和“粉藕”的小技巧,别买错了

莲藕在我们的生活中非常的常见,但是大家可能不知道莲藕其实也是

《红苹果乐园》女主变身化妆品推销,被刘维认出时委屈落泪显心酸

《红苹果乐园》女主变身化妆品推销,被刘维认出时委屈落泪显心酸

早在2003年,青春偶像剧《红苹果乐园》的曝火,让女主萧晴的

家人隔几天就喊馋,鲜香嫩滑,待客大气上档次

家人隔几天就喊馋,鲜香嫩滑,待客大气上档次

- 酿豆腐 -因为不用煎,避免铲来铲去把豆腐弄碎,酿好后的豆

煮小米粥时,要牢记这个诀窍!米油多口感还香浓

煮小米粥时,要牢记这个诀窍!米油多口感还香浓

小米粥在我们中国是北方人非常喜欢喝的粥类,只因为对于这个小米

《演员》出状况,“何书桓”人设有分歧,赵薇陈凯歌各执一词

《演员》出状况,“何书桓”人设有分歧,赵薇陈凯歌各执一词

作为最近大火的综艺《演员请就位》每一期都能掀起,这一次也不例