stm32初识

第一次写
#初次接触stm32。
以前没做过关于硬件开发,觉得自己能力不够,大学专业学的电子信息。工作了两周了,谈一下我对嵌入式开发的认识。
1.模糊的认识。
大学时关于串口、中断、DMA都学习,现在也是这些,懂又好像不懂,知道怎么用,但不知道为什么要用中断、DMA,不知道什么时候用。因为觉得就算不用中断好像也能实现相应功能。
2.寄存器。
任何操作都是通过设置寄存器的位来实现的。库函数也是对寄存器操作的封装。而任意一个简单地功能至少也有几个寄存器。就目前看,我觉得寄存器也是在某个固定地址上的字节,实质上和其它数据没有什么区别,只是认为取名为寄存器,因为它确实通过置位和复位实现了某种功能。
但不理解的一点事=是为什么要需要如此多的寄存器,很多功能看得我头疼,比如传输数据不仅仅是发送数据,要把很多相关数据通过寄存器设置好,把很多状态位调整好,经过一系列准备工作,才可以读或写。我觉得这一系列准备步骤是最麻烦的。很多我都看不懂。
3.通信。
关于硬件之间的通信,目前了解到 iic、串口(232、485)、spi、can、i/o,到现在基本不知道他们之间的区别,有的具体通信协议也不太明白。iic就是sda和sck两根线,一根数据、一根时钟,相互配合读写,好像是sck高电平时,sda的下降沿为开始信号,还有什么收发确实ack,结束信号。iic的代码有的地方看不懂,有时候不知道一直在置0、置1,。但看很多芯片要用到iic来通信。串口,用串口接虚拟机怎么都连不上,后来就放弃了。串口就是一个一个字节顺序发,就像是排队一样,设置好波特率、停止位、奇偶校验,就一直发信号就行了。对于stm32来说,因为它是串口复用i/o,所用来用串口前要想使能,把i/o口用作串口,通常是PA7、PA8。对于串口,一直不知道怎么用串口调试助手。因为分不清到底是读写,方向是什么,收发的目标是谁,串口调试助手到底串口向电脑发还是电脑向串口发。spi、can还没怎么接触过,具体怎么用还不知道,但感觉CAN的帧还挺复杂的。
4、调试
对于程序编译好后的调试,基本不知道怎么做。
目前看可以用串口、jlink、stlink。
但具体调试步骤呢,要一行行执行吗,要一直看寄存器数据吗,还是实验正确就不管了。
5.mdk工程
对于一个mdk工程,主要有这么几块。USER,要实现的功能在这个文件夹;OBJ,编译的中间文件和目标文件;SYSTEM,一些必要的delay、usart文件;
CORE,mdk的内核,芯片具备的功能里边都可以找到,比如中断、rtc等;最后,还有启动文件和main函数。
印象最深刻的就是define 宏定义 不管是地址、变量,都可以用带有一定含义的字符 宏定义,而且经常是一连串的,一个地址、变量要经过多次宏定义。不知道有什么不要去记一下常见的字符的含义,没准有这个必要。
u16、u8,只知道是指位长度,u代表的什么含义不太清楚。
对于寄存器的操作还不太会,什么左移、右移,与、或。
函数名称感觉每个都很长,用了很多代表他含义的字符。
typedef* 结构体经常用到,通常用来配置参数、初始化。
if()逻辑语序里,感觉if还是最常用的,有时嵌套的太多了会乱。
while()经常用来判断状态位,里面用getflag getstatus 这些函数,判断接收或发送是否成功或完成,或者是一些中断是否开启。在main函数里常用while(1)来循环执行某个操作。
函数 在写函数还是不太清楚哪些东西要放在一个函数里,对于函数的使用也不清楚。 但给我的感觉所有的东西都在函数里,函数基本掌控着一切,所有东西都是不同的函数的配合实现的结果。
位数 关于8位数据和16位数据的隐形转换不太明白。
6.时间
一直以来不理解时钟是个什么东西。我想象大概是电子世界里也需要一块表,这样他们就知道哪个时间做什么。听老师说,时钟就是硬件的脉搏。时钟除了分内部、外部类型不用之外,最重要的就是频率了。在多少赫兹下工作基本就是一个时钟能够关心的一切了。对于总线时钟、systick、rtc、定时器,基本不知道他们的区别,我也不明白定时器到底是不是时钟。
任何外设或者i/o口要用时第一件事就是使能时钟线,APB1或APB2。
delay函数用的是systick,我对时间衡量的理解就是数数,一直在数数,数的快慢不同,如果是1kHz,就是一秒钟数1000个数。然后再设定一个常数,如10000这样数这个数就是10s。
rtc、定时器没怎么接触过,但我想也应该是数数。

你可能感兴趣的:(stm32初识)