串口调试技巧
可以将调试时会用到,但实际演示是不需要用到的代码用
#if xxx
//这里放调试代码
#endif
xxx是 一个宏定义,如果等于0则不编译相关代码,如果为1则编译相关代码
TFTLED触摸屏
FSMC:静态存储控制器
将TFTLCD当成SRAM使用
F4的使用(附带其他系列)
HAL库可移植性高,即使是不同系列,大部分代码都相同,重新在cubeMX上设置一下即可。
对不同系列的stm32进行 编程,相应的板级支持包需要改动,所以在电赛之前,如果想要用F4的话,就需要用cubemx对相应外设重新设置一遍,以保证想用的时候可以快速移植。
因为用的是正点的板子,直接移植正点原子的例程代码也行。
F4_DMA
从F4系列开始,多了一个FIFO功能。如果选用M To M, 则必须使用FIFO
例如F4上的串口比F1不只多了FIFO功能,还多了突发传输功能和 多了通道的选择。
使用了FIFO之后,发送端和接收端的字节大小就可以随意匹配。
如果要编写DMA的P To M的话(例如串口),把上面那个Transmit改成Receive,并且整行都放到串口接收中断里面去。
F4_I2C_EEPROM
F407和F103的I2C功能框图相同,所以设置方式也相同。
F419之后会多了滤波器(filter)的配置选项
其他更加细节的EEPROM知识可参考B站野火HAL视频教程的“I2C-读写EEPROM”
光耦保护与隔离
通用输出口采用光耦隔离加NMOS管,可以输出大电流,上拉电阻为3.9K时,可以兼容3.3,5.5, 12., 甚至24V的输出电压。
使用EXVCC和EXGND时要另外供电,可直接驱动小功率的直流有刷电机等外设。
即IO口的电平高低与 板子上的实际输出时相反的。当输出低电平时,输出电压与EXVCC相等。
YSF4_Pro上总共有12路的光耦隔离输入,每个都可以直接24V的电压信号输入。
当引脚检测到低电平时表示有输入(光耦输入端电平越高,相应引脚检测到的电平越低)
F4的高级定时器
可以用高级定时器产生3对6路的互补PWM输出,可以用来驱动三相电机,对应直流无刷电机的六步换相。
外部中断触发定时器消抖的按键检测方法
一般的系统用外部中断加延时(浪费CPU资源)的方式其实也够用来做按键控制了,直接用定时器消抖并不断轮询扫描(代码较复杂,移植时需改动较多)也是一种方法。但像是设计到实时操作系统之类的通过按键来进行人机交互的时候,其实以外部中断触发获取定时器节拍消抖的按键检测方式,才是最灵敏可靠的。
stm32f1按键检测使用外部中断以及定时器延时方式去抖_键键键键盘的博客-CSDN博客 (参考链接)
串口控制直流减速电机
关键函数:deal_serial_data( )
将野火例程的关键函数 移植过来后,用xubeMX重新设定生成新的初始化函数,记得开串口接收中断(在 MX上勾选串口全局中断),并将在新生成的初始化代码中编写开启串口接收中断),并移植串口中断服务函数,在循环中调用deal_serial_data()即可
该方法只是最为基本命令控制,还没用到协议对数据进行包和编写解析数据包的函数。
deal_serial_data( )用到了atoi函数,所以得记得添加上stdlib.h 头文件