蓝桥杯嵌入式STM32学习笔记(一)——MDK下C语言基础复习

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是怎么用的,不用担心我们到了之后就自然会了,这里有个印象就好

你可能感兴趣的:(STM32学习笔记,蓝桥杯,嵌入式,STM32)