完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
智能车竞赛用到的是STC8H8K64U的芯片,编好的库用的买芯片附带的历程,逐飞科技。记录一下学习过程中遇到的问题及对应解决方案。
一、阅读芯片手册 1.STC8H系列芯片的封装 我的理解是STC8H是个核心板,然后将它装在基板上,这里用的是LQFP64封装,由此产生了封装图(管脚图),可以从图中看到每个管脚的作用。 我买的是64PIN的,意思是有64个引脚。 二、阅读同学的代码 1.文件命名 (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、 2.管脚定义 (1)光电传感器 管脚P7.0、P7.1、P7.2 (2)超声波传感器 管脚P1.1 (3)直流电机 P2.0左边电机输入,P2.1左边电机输出 P2.2右边电机输入,P2.3右边电机输出 3.不懂的概念 (1)#ifndef,防止头文件被多重调用 (2)进制转换用——程序员计算器 例如0x80,0x表示这是十六进制,那么我们进入程序员计算器选择HEX(十六进制模式),输入“80”,得到需要的二进制 1 0 0 0 0 0 0 0 (3)红外传感器是光电传感器的一种,别再问两者区别了,包含关系。 (4)***it与define: define是一个宏的替换,相当于改名 ***it是定义一个管脚 **(5)使能:一个“允许信号”,不使能表示不允许。 (6)悬空、高阻态:悬空指不接任何元器件;高阻态指无上下拉电阻,是除了输入、输出外的另一种状态,相当于断路 (7)MCU:指单片机 (8)什么叫“过放”:过放,简单来说,电池电压降到截止电压后还在降,过度释放了。 (9)什么叫:串口使用定时器做波特率发生器: 4.读同学代码遇到的问题 (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管受到互补信号的控制,两个管子始终保持一个处于截止,另一个处于导通的状态。 好处:基本上可以真正做到输出高低电平,且都有驱动力,而且这个驱动力强于开漏输出。 缺点:多个使用时,如果要高电平与低电平混用的话,非常容易短路 开漏输出:与推挽输出想对应,但是无法实现真正的输出高电平,低电平是可以的,在输出高电平时会面临驱动力不足的情况,所以需要借助外部的上拉电阻去实现真正的输出高电平 好处:电平转换容易,主要是那个上拉电阻在起作用,你放哪,哪就是高电平,以及,可实现“线与” 什么叫线与:所谓的"线与"指的是多个信号线直接连接在一起,只有当所有信号全部为高电平时,合在一起的总线为高电平;只要有任意一个或者多个信号为低电平,则总线为低电平。 (2)为什么要设置上拉电阻 gpio_pull_set(P7_0,PULLUP); 因为有时候默认的电平情况是不清楚的,外部经过一个上拉电阻再接VCC,那么相应的引脚就为高电平,所以说是用于确定状态的。 ①上下拉电阻作用: 上拉电阻可以让电平稳定在高电平,下拉电阻可以让电平稳定在低电平 ,同时提高电路抗干扰性 ②不用会怎样: 应该是电路的驱动能力不足,单片机无法准确执行用户的要求 (3)电机上的编码器,通过编码器调节电机转速 (4)为什么要用定时器进行初始化实现外部计数 编码器采集数据要通过定时器作为外部计数。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1883 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1661 浏览 1 评论
1148 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
762 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1964浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
790浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
614浏览 3评论
631浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
593浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-13 05:40 , Processed in 0.596373 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号