STM32F103C8T6最小系统板学习笔记
目录
4.Error:Flash Download failed - Could not load file ****.axf
一、STM32F103C8T6
1. 硬件
1.1 调试器
主要用于程序下载和调试,即STM32F103C8T6最小系统板与电脑交互的工具。
1.1.1 ST-LINK
注意3.3v和GND一定不要连反
连接下面的引脚,而且连接要一一对应,引脚需要一个一个对应连接,stm32和st-link2的顺序并不是一一对应的。如图所示。
STLINK实物图 STM32F103c8t6最小系统板(所框区域为与stlink连接处)
引脚连接对应图
1.2
2. 软件
2.1 编译软件的下载
编译软件即Keil5 MDK
资料下载链接 :
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;
}
四、代码样例
见下一篇文章
更多推荐
所有评论(0)