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

日期:2019-10-09 21:04:14 来源:互联网 编辑 : 小优 阅读人数:597

这篇文章是紧接着上一篇的后续。疑问二、我C语言那么差学起来会不会很难?很多人都觉得,我的C语言那么烂,学STM32会不会很难。曾经的我也有这样的想法,那是因为还没真正的了解STM32的软件编程。用于S

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语言。

网友评论

无人像你一
无人像你一
这种烧录方式可以通过JLINK、STLINK等工具实现
2019-10-16 04:40 676
苏南张志文
苏南张志文
计算机、通信工程、电子科学与技术、控制科学等专业的课程都要学
2019-10-12 21:10 278
无梦旅人
无梦旅人
Minecraft为什么画质看起来很差?
2019-10-17 13:28 344
我想静静1
我想静静1
c语言的程序怎么烧进stm32里?
2019-10-20 13:23 899
stillnothi
stillnothi
如果按照传统的就业优势而言,或许女孩更适合学习经济类、艺术类、语言类、医药护理类、管理类、法学类等专业
2019-10-15 03:04 800
且听风吟f
且听风吟f
要么就是非常差,整体分数就靠语文和英语在哪里撑着了
2019-10-21 21:05 951
mchotdog
mchotdog
女生一枚,理科很差,学电子信息专业真的很难吗?
2019-10-15 01:41 65
入情不要深
入情不要深
TCK,TMS,TDI,TDO等,另外两根线是TRST和RESET
2019-10-21 10:31 328
sugar_31
sugar_31
该方式下载程序虽然方便,但是无法实现在线调试
2019-10-19 11:05 268

相关阅读

友情链接: 网站地图

为全球用户24小时提供全面及时的中文资讯

声明:本站不提供任何视听上传、存储服务,所有内容均来自正规视频站点所提供的公开引用资源,如有侵权信息请联系我们删除

COPYRIGHT © 2007-2018