stm32学习总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习总结
单片机学习经历总结
自从大二寒假接受了一次初始培训开始,我便开始了单片机的学习,一开始借了一块
MSP430G2553的板子,于是便从MSP开始学习单片机。一开始的我对于单片机一窍不通,只能对照着数据手册学习,逐渐开始了解什么是IO口,中断,定时器,AD转换等。开学来了以后接受了四次培训,期间又重新认识这些模块并在学长指导下开始写了一些程序作为练习。后续的学习中我在串口通讯这里遇到了很大阻碍,不太能理解其中的含义,网上的解释又不太看得懂,便找了一些STM32的视频来学习串口,期间发现51和MSP已经不是主流的板子了,现在的厂商更多的是用STM32这样的板子,于是后来的学习重心开始放到了STM32上,因为有了前面的基础,这次从头的学习就更加容易理解STM32的原理与使用了。
MSP430G2553一些模块的总结
(一).IO口模块,
1.我们实用的MSP430G2553有两组IO口,是P1和P
2.
2.IO口的寄存器有:方向选择寄存器PxDIR,输出寄存器PxOUT,输入寄存器PxIN,IO口内部上拉或下拉电阻使能寄存器PxREN, IO口功能选择寄存器PxSEL和PxSEL2,IO口中断使能寄存器PxIE,中断沿选择寄存器PxIES,IO口中断标志寄存器PxIFG。
3.所有的IO都带有中断,其中所有的P1口公用一个中断向量,所有的P2口公用一个中断向量。所以在使用中断时,当进入中断后,还要判断到底是哪一个IO口产生的中断,判断方法可以是判断各个IO口的电平。
4.中断标志PxIFG需要软件清除,也可以用软件置位,从而用软件触发一个中断。
5.PxOUT:如果引脚选择了内部的上拉或下拉电阻使能,则PxOUT设定电阻是上拉还是下拉,0:下拉,1:上拉
(二).时钟系统
1.MSP430的时钟源有:
(1).外接低频晶振LFXT1CLK:低频模式32768Hz,高频模式450KHz~8MHz
(2).外接高速晶振XT2CLK:8MHz;
(3).内部数字控制振荡器DCO:
(4).超低功耗低频振荡器VLO:
2.时钟模块:430的时钟模块有MCLK SMCLK ACLK :
(1).主系统时钟MCLK:提供给MSP430的CPU时钟。可以来自LFXT1CLK XT2CLK DCO VLO 可选,默认为DCO。
(2).子系统时钟SMCLK: 提供给高速外设。可以来自LFXT1CLK XT2CLK DCO VLO可选,默认为DCO。
(3).辅助系统时钟ACLK:提供给低速外设。可来自LFXT1CLK VLO。
PS 一个网上找到的比较严谨的延时程序
//#define CPU_F ((double)16000000)//cpu frequency16000000
#define CPU_F ((double)12000000)//cpu frequency12000000
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
(三).定时器
1.MSP430g2553具有两个16位的定时器:Timer0_A Timer1_A。分别具有三个捕捉/比较寄存器,具有输入捕捉,输出比较功能。可以产生定时中断,也可以产生PWM。
PS .下面是一段发射PWM的程序
#include "io430.h"
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
TACTL=TASSEL_1+TACLR;
CCR0=512-1;//PWM
CCTL1=OUTMOD_7;
CCR1=384;//384/512=0.75
CCTL2=OUTMOD_7;
CCR2=128;//占空比128/512=0.25
P1DIR|=BIT2;
P1SEL|=BIT2;
P2DIR|=BIT0;
P2SEL|=BIT0;
TACTL|=MC_1;
while(1)
{
LPM3;
}
return 0;
}
2.Timer_A的捕获/比较寄存器
TAR寄存器是Timer_A的16位的计数寄存器。TACCRx是Timer_A的捕获/比较寄存器,当为捕获模式时:当捕获发生时,把TAR的值装载到TACCRx中。当为比较模式时:TACCRx中装的是要与TAR寄存器相比较的值。
(四)ADC10
1.ADC10是十位的AD,在g2553上有A0~A7八个可以外接的AD通道,A10接到片上的温度传感器上,其他的通道都接在内部的VCC或GND上。
2.ADC10的采样方式有:单通道单次采样,单通道多次采样,多通道单次采样,多通道多次采样。
(五) UART
这个模块这要设置好几个控制寄存器,设置波特率,写几个收发函数就可以了。
STM32学习的总结
STM32的使用与MSP不同,它可以使用固件库来写程序,使得编写的难度与复杂度大大降低,但是在学习阶段我也必须了解它们的底层的具体寄存器来帮助我更好的了解与学习。在之前的学习中我学习了它的1.GPIO的配置和使用,2.中断的使用,3.如何配置系统时钟,
ART的配置和使用,6.基本定时器和高级定时器,6.AD的配置和使用。因为这些模块的一些参数比较长和复杂,部分和MSP有些相似。而且它的配置有具体的固件库格式很容易了解,在这里我就不一一列举了。
在学习过程中遇到的一些问题和对板子的看法
1.MSP430G2553
在学习MSP430的过程中,对于如何配置中断是我一开始遇到的一个很大的问题,我对它的中断使用格式有些混淆,随后在网上查询使我解决了这类问题。后来在编写程序的练习中对于中断的开关也出现过问题,后来发现不能用BIS_SR(LPM0_bits + GIE)这样,不然会导致CPU休眠,最好用_ENIT().在程序编写中对于循环的嵌套是个必须要注意的点,很容易出现错误。对于MSP430G2553这个板子,它是低功耗的板子,但是IO口太少,对于做一些作品有很大限制
2.STM32F103VET6
学习STM32中我用的是这款板子,它上面有7个GPIO,3个ADC,5个串口,对于现在的我做一些小作品来说是完全足够了。在学习和使用的过程中对于USART的使用尤为重要。之前做一个程序同时打开了串口1和串口2但是串口1接受的数据发送给电脑却不能通过电脑发送给串口2,是因为其中发生了溢出中断,没有清楚ORC位导致卡住了。在STM32的学习中要更仔细并多看数据手册,遇到问题也要多在网上询问,这样才能提高自己