嵌入式学习踩坑报告及难点说明
本集合用来收集嵌入式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为占空比。
STM32CUBEMX生成文件总是会把自己的写的代码清除
我写代码没有备份的习惯,每次写着写着,要添加配置了,就打开stm32cubemx添加,然后重新生成代码。然后发现,我自己写的代码没有了 ! 气的我把桌子都敲裂开了,更气的是我不长记性。
幸好由论坛老哥帮大忙:参考
重新生成时一定不能把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函数里添加时钟开启函数
否则的话就不会工作。笔者考试时就因为时间紧迫,忘记了这一茬,估计要痛失一大半的分数(和输入捕获的功能都没法被检测到了),希望后来者引以为鉴
标签:难点,异步,代码,通信,嵌入式,学习,时钟 From: https://www.cnblogs.com/7869-cistarr-5783/p/17308191.html