嵌入式学习踩坑报告及难点说明

本集合用来收集嵌入式32的学习中由于个人蠢笨且不修基础而多次犯下的错误,以供后来者言笑,或意外碰到,便于查询

表达式必须是指向完整对象类型的指针

此错误是在学习按键时候犯的,我定义了一个结构体数组在另一个文件

interrupt.h中,并在main.c中引用

extern struct keys key[];

然后所有引用了结构体成员变量的敌方都报了标题这个错,苦思冥想之后

加上了

#include "interrupt.h"

时钟配置

晶振频率经过两次相除得到目标频率

比如晶振频率是80,000,000

那么配置psc为8000-1(0~65535)
Counter Period 设置为100 - 1

那么时钟频率为100hz,即10ms中断一次。

同样的配置PWM也是如此。

其中pulse为占空比。

总结:HCLK/PSC/ARR=目标频率

STM32CUBEMX生成文件总是会把自己的写的代码清除

我写代码没有备份的习惯,每次写着写着,要添加配置了,就打开stm32cubemx添加,然后重新生成代码。然后发现,我自己写的代码没有了 ! 气的我把桌子都敲裂开了,更气的是我不长记性。

幸好由论坛老哥帮大忙:[参考](解决stm32cubemx重新生成代码自己添加文件没有了的小窍门 - STM32/STM8单片机论坛 - ST MCU意法半导体官方技术支持论坛 - 21ic电子技术开发论坛)

重新生成时一定不能把keil关了,然后cubemx干完活后,c和h文件给他改,工程文件千万不能给他动!

还有最最重要的,代码只能写在usercode begin —— end之间,其他的地方都时cubemx的地盘!

给char赋值

给char赋值1、2、3等后,就是类似int的1,2,3;而与字符串比较时就是ascii码123等的东西,必须加上

‘0’后才能真正比较

串口

UART和USART是两种常见的串口硬件电路,它们的区别是USART既可以使用异步通信,也可以使用同步通信,而UART只能使用异步通信。

异步通信和同步通信的区别是是否有时钟线。异步通信没有时钟线,需要在数据的头和尾加入起始位和停止位来区分不同的数据帧,接收方也需要预先知道发送方的波特率。同步通信有时钟线,收发双方通过统一的时钟来确定何时进行数据的传输,不需要起始位和停止位,传输效率比异步通信要高。

DMA

用比较形象的话来说,如果oop编程中析构程序是一个清洁工,那么DMA就是一个32中无需占用芯片运算的搬运工

时钟开启函数

所有要用到定时器功能的外设(PWM,IC(输入捕获),还有其他的一些)要在main函数里添加时钟开启函数

否则的话就不会工作。笔者考试时就因为时间紧迫,忘记了这一茬,估计要痛失一大半的分数(和输入捕获的功能都没法被检测到了),希望后来者引以为鉴

posted on 2023-04-11 22:49  Cistarr  阅读(25)  评论(0编辑  收藏  举报