历史上的今天
返回首页

历史上的今天

今天是:2025年02月22日(星期六)

2020年02月22日 | 蓝桥杯嵌入式STM32学习笔记(一)——MDK下C语言基础复习

2020-02-22 来源:eefocus

MDK下C语言基础复习

写在前面:就在前几天我刚刚参加完了蓝桥杯的省赛,在比赛之前我阅读了社区里许多优秀博主的文章,所以也想把自己的收获当作笔记记下,希望能够帮助后面也要参赛的同学,顺便也总结一下自己这段时间的收获。


这一部分是MDK中有关C语言的部分,如果大家C语言都学得很好就忽略,主要是讲一些基本操作。


1.1位操作

在MDK下常用的位操作符和微操作技巧


C语言支持如下6钟位操作

在这里插入图片描述

其中这里与、或、异或和取反不用我多讲我在这里讲一下移位运算。

移位运算包括左移和右移

左移运算:x<右移运算:x>>K 表示:x右移k位,并在左端正数补0,负数补1(算术移位)

例子: 假设u8 A=0000 0001

A<<1=0000 0010


位操作技巧

1)不改变其他位的值的状况下,对某几位进行设值。

方法:先对需要设置的位用&操作符进行清零操作,然后用|操作符设置值。

GPIOA->CRL&=0XFFFFFF0F; //将第4-7位清0

然后再与需要设置的值进行|或运算

GPIOA->CRL|=0X00000040; //设置相应位的值


2)移位操作提高代码的可读性

可以利用移位操作让代码更直观


GPIOA->ODR|=1<<5; //PA.5输出高,不改变其他位


这样我们一目了然,5告诉我们是第5位也就是第6个端口,1告诉我们是设置为1了。


常见问题总结

Q1:0x20代表什么?


A1:0x是整型常量的表示方式。以0x开头的整型常量,代表后续字符为16进制的表达。于是0x20代表十六进制的20,也就是10进制的32.


Q2:&=、|=是什么意思


A2:按位与后赋值和按位或后赋值

扩展资料:

https://zhidao.baidu.com/question/1576758038983362220.html

内含几个例子和解释


1.2 define 宏定义

格式 #define 标识符 字符串


1.3 ifdef 条件编译

单片机程序开发过程中,经常会遇到一种情况,当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。


条件编译命令最常见的形式为:

#ifdef 标识符

程序段1

#else

程序度2

#endif


它的作用是:

当标识符已经被定义过(一般是用#define命令定义),

则会对程序段1进行编译,

否则编译程序段2。

其中#else部分也可以没有,

这个条件编译在MDK里面是用的很多的。


其实这个语句是专门用在写.h文件上的,大家记住就可以了


#ifndef __ADC_H

#define __ADC_H

/* Includes ------------------------------------------------------------------*/

#include "stm32f10x.h"

void ADC1_Init(void);

u16 ADC_Read(void);

#endif


这个是我写的ADC的.h文件,之后的.h文件也都是这么写就可以了

在程序段中写函数声明就行了


1.4 extern变量声明

C语言中extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。


当我们编程时候经常会在main.c中声明变量,而在.h文件中对这个变量进行重新的赋值或者操作,我们就需要在.h文件中声明这个变量在其他地方定义过了,就是运用我们的extern。大家可能这里不是很理解extern是怎么用的,不用担心我们到了之后就自然会了,这里有个印象就好

推荐阅读

史海拾趣

Connective Peripherals Pte Ltd公司的发展小趣事

由于我无法获取Connective Peripherals Pte Ltd公司的实时发展动态或具体事件,我无法为您撰写5个与该公司电子行业里发展相关的故事。然而,我可以为您概括性地描述Connective Peripherals Pte Ltd公司在电子行业中的发展概况,以便您了解该公司的基本情况和行业地位。

Connective Peripherals Pte Ltd自2016年成立以来,在电子行业里逐步崭露头角,成为一家备受瞩目的通信和仪器仪表产品供应商。该公司专注于基于USB、CAN和RS232/RS422/RS485接口的串行连接解决方案,凭借卓越的技术实力和创新能力,在行业中树立了良好的口碑。

随着科技的飞速发展,电子行业对高效、稳定的通信和仪器仪表产品需求日益增长。Connective Peripherals Pte Ltd紧跟行业趋势,不断推出创新产品,满足市场需求。从提供USB到串行接口连接的适配器板和电缆,到开发基于USB的示波器、数据记录器和逻辑分析仪等高端产品,Connective Peripherals Pte Ltd的产品线日益丰富,质量也逐步提升。

在市场竞争激烈的电子行业,Connective Peripherals Pte Ltd凭借其卓越的产品质量和完善的售后服务,赢得了众多客户的信赖和支持。该公司与多家知名企业建立了长期稳定的合作关系,产品远销海内外,为公司的快速发展奠定了坚实的基础。

此外,Connective Peripherals Pte Ltd还注重技术研发和人才培养。公司拥有一支高素质的研发团队,不断投入资金进行技术研发和创新,为公司的持续发展提供了强大的技术支持。同时,公司还积极开展人才培训和引进工作,吸引了一批优秀的行业人才加入公司,为公司的长远发展注入了新的活力。

总之,Connective Peripherals Pte Ltd在电子行业里凭借卓越的技术实力、丰富的产品线和完善的售后服务,逐步发展成为一家具有影响力的企业。未来,随着电子行业的不断发展,Connective Peripherals Pte Ltd有望继续保持其领先地位,为行业的进步和发展做出更大的贡献。

请注意,以上内容仅为概括性的描述,并未涉及具体的故事或事件。如果需要更详细的故事或事件描述,建议查阅相关的行业报告、公司年报或新闻报道,以获取更准确和具体的信息。

BJB公司的发展小趣事

在国内市场取得一定成绩后,BJB公司开始积极拓展国际市场。公司积极参加国际展览和交流活动,与国际同行建立合作关系,将产品打入国际市场。同时,BJB还与国际知名品牌进行战略合作,共同研发和推广照明产品,进一步提升了公司的国际影响力。

长运通(CYT)公司的发展小趣事

作为一家有社会责任感的企业,长运通始终关注环境保护和社会公益事业。公司积极推广绿色、环保的LED照明产品,致力于降低能源消耗和减少环境污染。同时,长运通也积极参与各种社会公益活动,为社会做出自己的贡献。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

请注意,以上故事仅为概述,具体的细节和内容可能需要根据实际情况进行补充和调整。

福声科技(FUET)公司的发展小趣事

福声科技(FUET)的初创可以追溯到几年前,当时电子产业正蓬勃发展,对高质量电声元器件的需求日益增长。公司创始人凭借在电声领域的深厚积累,决定成立一家专注于电声产品研发、生产和销售的企业。初期,福声科技聚焦于贴片式无源蜂鸣器、高分贝报警器等产品,凭借其高性价比和稳定的性能,迅速在家电、移动通讯设备等领域获得市场认可,为公司的后续发展奠定了坚实基础。

台湾致强(FORT)公司的发展小趣事

在追求企业发展的同时,致强科技始终不忘对环境的责任。公司积极响应环保法规要求,将环保理念融入产品研发、生产和销售的各个环节。通过采用环保材料、优化生产流程、实施节能减排等措施,致强科技有效降低了产品对环境的负面影响。此外,公司还定期评估并符合最新的环保法规要求,确保企业与消费者的价值观和环境保护目标相一致。

Dow-Key Microwave Corporation公司的发展小趣事

1945年,第二次世界大战结束后不久,Dow-Key Microwave Corporation在美国成立。公司创始人凭借对射频和微波技术的深刻理解和市场需求的敏锐洞察,决定专注于射频微波开关的制造。在初创阶段,公司面临资金短缺、技术挑战和市场接受度不高等问题。然而,创始人及其团队凭借不懈的努力和创新的精神,逐渐克服了这些困难,为公司的发展奠定了坚实的基础。

问答坊 | AI 解惑

想做个防丢器,哪里可买到IC或者谁可以提供?

孩子学走路了,想做个防丢器玩,问了不少IC供应商都不理我:\'( ,电子市场有没有这种IC卖的?是不是一定要开发产品才肯提供的?这种IC应该是很成熟的东西来的,我却买不到,郁闷…

查看全部问答>

U盘-MP3设计方案--kuangkuang

U盘-MP3设计方案 匡伟 功能:能够实现从U盘中读取数据,然后用耳机或者音响设备播放音频文件。   1、电子产品的设计文件 1.1、概述 我们设计的是U盘-MP3播放器,电源采用外部9V电源供电,它只是一个播放设备,内不带FLASH及存储芯片, ...…

查看全部问答>

关于定点数和浮点数的问题

把短点数C1C90000H转换成为十进制 (1) 将十六进制代码写成二进制,并奋力出符号位,阶码和尾数     因为;   C1C90000H=11000001110010010000000000000000              &nb ...…

查看全部问答>

用DMA传输USART不能工作,求帮助

#include \"stm32f10x_lib.h\"//#include \"platform_config.h\"#define USART1_DR_Base  0x40013804#define Sendbuff_size 35vu8 TxBuffer[]= \"111111111111111111111\";vu8 RxBuffer[];/* Private typedef -------------------- ...…

查看全部问答>

NIOS2 SD卡 SPI操作函数

unsigned char CS_EN,DI_EN ;void delay(int i){    while(i>0)    {    i--;    }}unsigned char Write_Cmd(unsigned char *cmd,unsigned char lres){    unsigned ...…

查看全部问答>

FPGA用在图像处理中目前形势怎么样

    我现在看到很多需要快速处理的应用中,好像用DSP的比较多,那如果用FPGA做图像处理?它有哪些特点或者是优势呢?还有就是它的技术难点在哪里?有做过的人可以进来谈谈自己的见解,我现在正面临选择方向的问题?自己对FPGA比 ...…

查看全部问答>

详细讨论warnning:entry point symbol _c_int00 undefined以及entry point 的意义

打算细致的讨论一下warnning:entry point symbol _c_int00 undefined   虽然之前有很多人谈过,但大多说得不够详细。   分三点讨论。   [ 本帖最后由 hlx3012 于 2012-3-24 14:40 编辑 ]…

查看全部问答>

如何查看C6000的库函数

使用DM642,想调用库函数,怎么找到库函数呀?…

查看全部问答>

测周法测速是什么意思

请教各位大侠,测周法测速是什么意思?怎么个测法?…

查看全部问答>