目录

一、STM32F103C8T6

 1. 硬件

1.1 调试器

1.2 

2. 软件 

2.1 编译软件的下载

2.2 学习时遇到的问题

1. 代码规范

2.下载不进去

3.汉字出现乱码

4.Error:Flash Download failed - Could not load file ****.axf

2.3 kile5 好用的技巧

2.3.1 Debug

​编辑2.3.2 Ctrl + f

2.3.3 Ctrl + 空格

二、外部模块

1. 显示屏 

1.1 0.96寸四管脚OLED显示屏

1.1.1 硬件

1.1.2 软件

1.1.2.1显示汉字的步骤

1.1.2.2显示图片的步骤 

2. 蓝牙模块

2.1 HC-05 

​编辑​编辑

2.1.2软件

3.电机

3.1 小黄电机

3.2编码器电机

4.电机驱动模块

4.1 L298N

4.2 TB6612

5. 舵机

5.1普通舵机 

5.2总线舵机

6.PCA9685舵机驱动模块

7.超声波模块

8.MPU6050(陀螺仪) 

三、相关代码

3.1宏定义

四、代码样例


一、STM32F103C8T6

 1. 硬件

1.1 调试器

        主要用于程序下载和调试,即STM32F103C8T6最小系统板与电脑交互的工具。

        注意3.3v和GND一定不要连反

        连接下面的引脚,而且连接要一一对应,引脚需要一个一个对应连接,stm32和st-link2的顺序并不是一一对应的。如图所示。

STLINK实物图                                       STM32F103c8t6最小系统板(所框区域为与stlink连接处)

引脚连接对应图

1.2 

2. 软件 

2.1 编译软件的下载

        编译软件即Keil5 MDK

        安装视频:[2-1] 软件安装_哔哩哔哩_bilibili

        资料下载链接 : 

资料下载https://jiangxiekeji.com/download.htmlhttps://jiangxiekeji.com/download.htmlhttps://jiangxiekeji.com/download.htmlhttps://jiangxiekeji.com/download.htmlhttps://jiangxiekeji.com/download.htmlhttps://jiangxiekeji.com/download.htmlhttps://jiangxiekeji.com/download.htmlhttps://jiangxiekeji.com/download.html

2.2 学习时遇到的问题

1. 代码规范

        注意stm32的代码结尾要空一格

2.下载不进去

        注意下载后出现下图可能是因为LINK和32并没有连接好,可以检查检查LINK的线是否和32一一对应了,也可能是LINK或者32坏了…   这时可用万用表分别测量一下LINK和32的正负是否短接,或者摸一下LINK和32是否发烫可初步判断好坏。                       

3.汉字出现乱码

        点击Edit,选择最下边的Configuration

        修改下图所圈区域一般为所框选的GB2312(即国标)即可。

4.Error:Flash Download failed - Could not load file ****.axf

        原因:

        1.没有编译  解决办法 先编译再load

        2.keil 没破解 解决办法 破解keil 具体方法:            keil uvision5最新破解安装详细教程(附注册机)_编程开发_软件教程_脚本之家

        注:kile5最好不要更新,重新下载后要重新利用注册机破解。

2.3 kile5 好用的技巧

2.3.1 Debug


        可以用来实时监测一个变量的值 

 步骤:

       首先,选中想要查看值的变量;

        然后,右键选择add然后选择Witch1;

        然后就可以在右下方见到要看的变量;

        最后点击左上方的运行符号就可以了。

2.3.2 Ctrl + f

        可以搜索代码中已写的变量在哪里


2.3.3 Ctrl + 空格

        可以找到相关的函数和变量的东西 

二、外部模块

1. 显示屏 

1.1 0.96寸四管脚OLED显示屏

1.1.1 硬件

        OLED一共有四个接口分别是SCL(时钟),SDA(数据),GND(电源负),VCC(我一般给3.3V, 我感觉5V有危险)

1.1.2 软件

        正常使用即显示数字、字母以及符号比较简单,代码篇会给出代码,本文主要介绍如何显示汉字以及图片。

        首先要了解OLED是如何显示东西的,可以搜一搜其他人的详细讲解。按我理解显示东西的步骤就是先对这个东西取模,然后转换成01的信号给OLED再显示。因此便要用到取模软件,我用的软件是PCtoLCD2002,文末会有相关下载链接。

1.1.2.1显示汉字的步骤

        下面是取模的步骤

        1.这是打开软件后的界面(有改动)

        2.点开我所圈的

        3.对照着图片改成一样的,别忘了点确定,最重要的是改成c51格式,和像素大小改成14(像素不改会有点问题)

         4.输入你想要的汉字,点击生成字模,并给字模复制下来

         5.接下来打开OLED_Font.h,找到const char Font_Chinese[][32]函数,在大括号中加入你想要的汉字的取模后的代码。如下所示即可

const  char Font_Chinese[][32]=
{ 
{0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00},
{0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00},/*"你",0*/
{0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00},
{0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00},/*"好",1*/
};

        6.接着在主函数中调用void OLED_ShowChinese(uint8_t Line,uint8_t Column,uint8_t num);函数即可显示汉字,第一个参数是第几行,第二个是第几列,第三个是显示第几个汉字(如果显示的第一个汉字则填0)。

        以下代码则显示在第一行第四列显示第一个数字,第一行第五列显示第二个汉字。

OLED_ShowChinese(1,4,0);
OLED_ShowChinese(1,5,1);
1.1.2.2显示图片的步骤 

2. 蓝牙模块

2.1 HC-05 

        注意蓝牙模块需要调波特率,蓝牙模块本身的波特率需要与stm32的一致才能接收到正确的数据,如果接收到的数据不正确首先看看波特率一致不一致,可用usb转ttl进行检查,使用usb转ttl时注意把3.3v和vcc用跳线帽连接好,用5v给蓝牙模块供电,然后蓝牙模块的RXD链接usb转ttl的TXD,蓝牙模块的TXD链接usb转ttl的RXD。然后电脑端的串口助手我用的是江协科技的,手机端的是我自己找的。 

TXD发送端

RXD接收端

2.1.2软件

         电脑端的串口助手:https://download.csdn.net/download/2301_76339996/88637178

        手机端的串口助手:https://download.csdn.net/download/2301_76339996/88637183

3.电机

        电机停下的条件:占空比为0,或者两边同时置高或者置低即无电压差

3.1 小黄电机

        如下图 

        其有两个端口,只要使两端有足够的电压差便能转起来,一般给的电压为7v左右,把正负调转过来便能控制电机的正反转;

        如果只是需要不让他一直转动,直接连接电池两端便可以;

        如果为控制是否转动或者转速便需要用到电机驱动模块,下面会讲,它的两端与L298N的连接线为连接L298N的OUT1和OUT2或者OUT3和OUT4,这便需要看一下你的需求了。 

3.2编码器电机

        顾名思义其与普通电机区别就是它有编码器,所以接口不只有两个,其有六个,如下图

        其最外端两个相当于小黄电机的两个接口,第2个和第4个为霍尔编码器的供电端口,最中间的两个为编码器返回值计数的端口 

4.电机驱动模块

        单片机的IO口确实能输出5V的电压,也确实是和电机的电压一样,但不要忽略IO口输出的电流,也就是驱动能力。IO口输出的电流太小了,根本带不动电机。所以需要电机驱动模块。

4.1 L298N

        连线(L298N上标有相关字母,相关引脚以标的为准)

        ①.1、2、3、4分别为OUT1、OUT2、OUT3、OUT4 ,

        1、2与一个电机相连接;3、4与一个电机相连接。

        ②.5为vcc即为外电源输入端

        ③.6为GND

        ④.当跳线帽连上时,7为5v输出,即可以给单片机供电 

        ⑤.8从左到右依次为ENA,IN1,IN2,IN3,IN4,ENB

        ENA:电机A使能,需要控制速度时此端与单片机的PWM连接,不需要时把跳线帽插上,电机全速转动。

        IN1,IN2:两端的电压差控制电机A正反转

        IN3,IN4:两端的电压差控制电机B正反转

        ENB:电机B使能,需要控制速度时此端与单片机的PWM连接,不需要时把跳线帽插上,电机全速转动。

4.2 TB6612

5. 舵机

5.1普通舵机 

        连线:普通舵机有三个接口,最中间的是vcc,两端为GND和信号线(PWM) 

        该舵机分为180°和360°,供电为5v,3.3v不能驱动

        注意180°舵机改变pwm可以使其停下来,而360°舵改变pwm值只能使得转速改变,停不下来。 

        该单轴舵机扭矩大,能承受的驱动电压也更大,不过一般也给5v,额定电压为4.8~6v不过给7v好像也不会烧

        此为双轴舵机,额定电压也为4.8~6v 

5.2总线舵机

        此为总线舵机,普通舵机的代码无法驱动单个总线舵机。 

6.PCA9685舵机驱动模块

        连线

        ①最上端的绿色的两个引脚为外接电源的供电口,当使用多个舵机时需使用此供电口供电

        ②最左端的六个引脚:

        OE为使能端口,默认不用接线,即低电平使能,

        SCL、SDA为I2C所需要的引脚,

        VCC为该模块供电,不能超过3.3v

        V+为舵机供电口,多个舵机供电尽量不使用此供电口供电

        ③下端的引脚为16个舵机控制口,注意第一个编号为0.

7.超声波模块

8.MPU6050(陀螺仪) 

三、相关代码

3.1宏定义

        #define 可以将一对文本进行替换,在编译器读到需要被替换的文本的时候,会将这些文本全部替换成我们给定的文本。

        在C语言中,宏名不能以数字开头‌。宏名的命名规则与变量名和函数名相同,只能使用字母、数字和下划线,且第一个字符不能是数字‌12。例如,宏名可以使用大写字母和下划线的组合,如MAX_VALUE,但不能以数字开头,如1_MAX是不允许的‌1。

        例如以下代码,在这里,我们将 “A”和“B” 分别使用宏定义,定义为 100和200,在以后的语句中,一旦编译器读取到 “A”和“B” 就会直接将该位置的 “A”和“B” 替换为对应的数字文本,因此 “C” 的最后值为 300。

#define A 100
#define B 200
int main()
{
	int C = 0;
	C = A + B;
	printf("C = %d\n", C);
 
	return 0;
}

四、代码样例

见下一篇文章

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐