智能车竞赛用到的是STC8H8K64U的芯片,编好的库用的买芯片附带的历程,逐飞科技。记录一下学习过程中遇到的问题及对应解决方案。
我的理解是STC8H是个核心板,然后将它装在基板上,这里用的是LQFP64封装,由此产生了封装图(管脚图),可以从图中看到每个管脚的作用。
我买的是64PIN的,意思是有64个引脚。
(1)isr.c、isr.h:
表示里面装的代码是关于“中断”的。
(2)exit.c、exit.h:
表示里面是main中编写用到的所有自定义函数。
exit.h里面全是自定义的函数void汇总。
(3).c与.h
.c是代码本身,.h是管脚的定义
(4)#include “headfile.h”
表示引用自带的所有库
(5)所有自定义函数汇总
board.c:board_init、DisableGlobalIRQ、EnableGlobalIRQ
spi.c:spi_init、spi_change_pin、spi_change_mode
iic.c:iic_init、iic_change_pin
uart.c:uart_init、uart_putchar、uart_putbuff、uart_putstr
add.c:adc_init
tim.c:ctimer_count_init、ctimer_count_clean、pit_timer_ms
pwm.c:pwm_set_gpio、pwm_init、pwm_duty、pwm_freq
exit.c:exit_init
gpio.c:gpio_pull_set、gpio_mode
eeprom.c:iap_init、iap_set_tps、iap_read_bytes、iap_write_bytes、iap_erase_page、extern_iap_write_bytes
delay.c:delay_init、delay_ms、delay_us
nvic.c:NVIC_SetPriority
自定义(没在库函数中的):pin_init、SpeedCtrl、
(1)光电传感器
管脚P7.0、P7.1、P7.2
(2)超声波传感器
管脚P1.1
(3)直流电机
P2.0左边电机输入,P2.1左边电机输出
P2.2右边电机输入,P2.3右边电机输出
(1)#ifndef,防止头文件被多重调用
CSDN上对应描述
(2)进制转换用——程序员计算器
例如0x80,0x表示这是十六进制,那么我们进入程序员计算器选择HEX(十六进制模式),输入“80”,得到需要的二进制
1 0 0 0 0 0 0 0
CSDN关于程序员计算器的讲解
(3)红外传感器是光电传感器的一种,别再问两者区别了,包含关系。
(4)sbit与define:
define是一个宏的替换,相当于改名
sbit是定义一个管脚
关于两者的进一步讨论
**(5)使能:一个“允许信号”,不使能表示不允许。baidu的定义
(6)悬空、高阻态:悬空指不接任何元器件;高阻态指无上下拉电阻,是除了输入、输出外的另一种状态,相当于断路
(7)MCU:指单片机
(8)什么叫“过放”:过放,简单来说,电池电压降到截止电压后还在降,过度释放了。
过放的百度知道
(9)什么叫:串口使用定时器做波特率发生器:
(1)I/O的引脚模式
gpio_mode(P7_0,GPI_IMPEDANCE);
此芯片:I/O除了P3.0和P3.1外,其他所有的I/O口在上电后默认是高阻输入状态,所以手册里要求用户在使用I/O前必须要设置I/O的模式。
GPIO:准双向口
GPO_PP:推挽输出
GPI_IMPEDANCE:高阻输入
GPI_OD:开漏输出
在开始解释这四个概念前,可以先将它们分类,“准双向口”是输入与输出,高阻输入只输入,另外两个是输出,相当于一共有三类。
准双向口:首先要明白准双向I/O口的意思,很多处理器的引脚可以设置为双向端口,双向端口的要求就是可输入与输出。
对于51单片机而言,所以的I/O口直接就是准双向I/O口,而反观stm32内核的单片机,它的I/O的模式是需要自己设置的,准双向口是其中的一种,设置后就可以等效于51单片机中的I/O了。
其实质用的是一个弱上拉电阻,在输入IO的情况下,无法做到完全的只有输入没有输出,才形成了既有输入又有输出的情况。
高阻输入:从手册上讲,高阻输入就是“电流既不能流入,也不能流出”,有点感觉像高阻态了
为什么这样做:是为了对于不用的I/O让它不对用的产生干扰
推挽输出:(专业解释)推挽输出的结构是由两个三极管或者MOS管受到互补信号的控制,两个管子始终保持一个处于截止,另一个处于导通的状态。
好处:基本上可以真正做到输出高低电平,且都有驱动力,而且这个驱动力强于开漏输出。
缺点:多个使用时,如果要高电平与低电平混用的话,非常容易短路
开漏输出:与推挽输出想对应,但是无法实现真正的输出高电平,低电平是可以的,在输出高电平时会面临驱动力不足的情况,所以需要借助外部的上拉电阻去实现真正的输出高电平
好处:电平转换容易,主要是那个上拉电阻在起作用,你放哪,哪就是高电平,以及,可实现“线与”
什么叫线与:所谓的"线与"指的是多个信号线直接连接在一起,只有当所有信号全部为高电平时,合在一起的总线为高电平;只要有任意一个或者多个信号为低电平,则总线为低电平。
复习材料一:GPIO引脚模式
复习材料二:GPIO输入输出各种模式(推挽、开漏、准双向端口)详解
复习材料三:关于stm32单片机准双向IO口配置
(2)为什么要设置上拉电阻
gpio_pull_set(P7_0,PULLUP);
因为有时候默认的电平情况是不清楚的,外部经过一个上拉电阻再接VCC,那么相应的引脚就为高电平,所以说是用于确定状态的。
①上下拉电阻作用:
上拉电阻可以让电平稳定在高电平,下拉电阻可以让电平稳定在低电平 ,同时提高电路抗干扰性
②不用会怎样:
应该是电路的驱动能力不足,单片机无法准确执行用户的要求
资料一:stm32设置内部上拉电阻_比较全面的电阻上、下拉介绍
资料二:上下拉电阻作用
(3)电机上的编码器,通过编码器调节电机转速
资料一:STM32直流减速电机控制篇(一)PWM调速
资料二:STM32直流减速电机控制篇(二)编码器测速原理
资料三:STM32直流减速电机控制篇(三)编码器测速程序编写
资料四:STM32与PC串口通信 实现步进电机转速可调 程序及调试过程分享
(4)为什么要用定时器进行初始化实现外部计数
编码器采集数据要通过定时器作为外部计数;