基于ARM CORTEX M的串行数据处理编程.doc

上传人:doc321 文档编号:12772330 上传时间:2021-12-06 格式:DOC 页数:13 大小:990.50KB
返回 下载 相关 举报
基于ARM CORTEX M的串行数据处理编程.doc_第1页
第1页 / 共13页
基于ARM CORTEX M的串行数据处理编程.doc_第2页
第2页 / 共13页
基于ARM CORTEX M的串行数据处理编程.doc_第3页
第3页 / 共13页
基于ARM CORTEX M的串行数据处理编程.doc_第4页
第4页 / 共13页
基于ARM CORTEX M的串行数据处理编程.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《基于ARM CORTEX M的串行数据处理编程.doc》由会员分享,可在线阅读,更多相关《基于ARM CORTEX M的串行数据处理编程.doc(13页珍藏版)》请在三一文库上搜索。

1、基于ARM CORTEX M的串行数据处理编程 作者: 日期:13 个人收集整理 勿做商业用途微机原理课程设计题目:基于ARM CORTEX M3的串行数据处理编程1:说明:1.工程描述:串口1接收到的1组严格按以下格式的数据,7个字节,格式为:FA LED1 LED2 LED3 LED4 校验和 FE其中LED1到LED4的取值为0或1若LEDN为1,将灯N点亮,否则灯N熄灭2:要求:1).在串口中断服务程序void USART1_IRQHandler(void)中用C语言编写代码接收数据到缓冲区(若干个字节的数组)2)不允许在中断服务程序中判断校验和是否正确,不允许在中断服务程序中点亮和熄

2、灭灯,校验和点亮和熄灭灯的操作应该在主程序中执行。3)。要求每接收到一组数据都能进行处理,当未接收完一组数据的时候不应去对数据进行处理4) 要求对硬件的操作采用寄存器编程方式,不使用库函数3.课程设计报告要求:1)包括主程序和中断服务程序的源代码,每行代码加注释2) 画出程序执行的流程分析图3) 格式要求如下: 1。课程设计题目分析 2.资料查找和学习过程 3。代码和分析 4。代码流程图 5.心得2:参考资料:2。1原理图2。1。1 MCU及其周围电路设计如图2。1.1为MCU及其周边电路.8。低速晶振电路1.唤醒电路7。AD输入2。复位电路3.启动配置4.高速晶振电路5。AD参考电路6。后备

3、电池6。备用电源5.参考电压图2。1.1 MCU及其周边电路2.1。2 USB转串口电路设计 USB转串口电路可以方便没有串口的笔记本电脑用户通过USB接口下载代码到FLASH中,及进行RS232串行通信。图2。1。2 USB转串口接口电路USB转串口芯片是CP2102,该芯片稳定性较好.当其正常工作的时候,灯LED6亮.该芯片DP/D+引脚连MINI USB接口的脚3,DM/D-引脚连MINI USB接口的脚2,为一对USB输入输出线.TXD与RXD引脚接MCU的PA10(USART1_RX)和PA9(USART1_TX)。2。1。3 按键、LED显示电路和其他接口按键、LED和蜂鸣器是常规

4、的设备,除了RESET和WAKEUP按键外,开发板上还提供了2个按键,具有4个高有效的指示灯和蜂鸣器,电路如下图2。1。8所示。图2.1。3 指示灯、按键、蜂鸣器电路2.2相关资料2.2.1 STM32F103VET6( CORTEX M3内核的MCU)概况表项目解读内核ARM 32bit Cortex-M3 CPU 核最高频率72 MHz处理能力1。25 DMIPS/MHz平均每个时钟执行1.25条指令,这是比较高的处理能力.FLASH512K字节 Flash存储器SRAM64K字节 SRAM电源和I/O输入范围2.0 到 3.6V 模数转换器ADC3个12位ADC,16通道数模转换器DAC

5、2个12位DAC,2通道GPIO80个,可忍受5V的高压调试串口调试 (SWD) 和 JTAG 接口定时器8个,TM1TM8通信接口13个, 5个串口,2个I2C,3个SPI, 1个CAN,1个USB,1个SDIOFSMC有2.2.2 CORTEX M3寄存器3。3。1 GPIO寄存器GPIO寄存器包括:两个32位的配置寄存器(GPIOx_CRL,GPIOx_CRH)、两个32位的数据寄存器(GPIOx_IDR,GPIOx_ODR)、一个32位的置位/复位寄存器(GPIOx_BSRR)、一个16位的复位寄存器(GPIOx_BRR)、一个32位的锁定寄存器(GPIOx_LCKR)。以上所有寄存器

6、不允许按位访问或字节访问,必须按32位字访问。1。配置寄存器(GPIOx_CRL,GPIOx_CRH) (x=A。.E)STM32每个GPIO端口有两个32位配置寄存器, 如GPIOC_CRL,GPIOC_CRH为端口C的配置寄存器. STM32一个端口有16位,也就对应芯片的16个管脚。CRL控制端口的低八位,CRH控制端口的高8位。 图3。3.1 GPIO配置寄存器CRL由图3。3.1,CRL寄存器共32位,4位1组,每组控制1个引脚的配置(输入输出模式).例如,假设这个计算器是GPIOC-CRL,位3128共4位,那么这4位控制了GPIOC的7脚的输入输出模式。假设要配置GPIO的IO口

7、y,那么需要写CNFy1:0和MODEy1:0.MODE1:0配置输入输出模式,输出的速率:00:输入模式(复位后的状态) 01:输出模式,最大速度10MHz 10:输出模式,最大速度2MHz 11:输出模式,最大速度50MHz CNF1:0取值及含义根据配置为输入和输出有不同: 输入模式下:00:模拟输入模式 01:浮空输入模式(复位后的状态) 10:上拉/下拉输入模式 11:保留 输出模式下00:通用推挽输出模式 01:通用开漏输出模式 10:复用功能推挽输出模式 11:复用功能开漏输出模式 CRH寄存器除了控制的是高8位端口外,其结构和含义都与CRL完全相同.如果IO口是07号的话,则写

8、CRL寄存器,如果IO口是815号的话,则写CR寄存器。例如,要设置GIPOD的4位端口为最高50M频率的推挽输出,15位端口位上拉下拉输入模式,应该设置如下:GPIOD-CRL的CNF41:0为00,GPIODCRL的MODE41:0为11。GPIODCRH的CNF71:0为10,GPIOD->CRH的MODE71:0为00。因此,编程如下:GPIOD->CRL&=0XFFF0FFFF; /清掉对位4的配置GPIODCRL=0X00030000; /写位4的位置为0011GPIODCRH&=0X0FFFFFFF; /清掉对位15的配置GPIOD->CRH=0

9、X8000000; /写位15的配置为1000为什么要写的这么麻烦呢,就是因为只能32位操作,不能进行位操作的原因!如果是对整个PD口进行配置,才可以直接赋值.2. 端口输入数据寄存器(GPIOx_IDR)和 端口输出数据寄存器(GPIOx_ODR) GPIOx_IDR是只读,作输入数据寄存器,这个寄存器是32位的,并且只能是按16位进行编程操作.图3.3。2 数据输入寄存器IDRDRy31:16:保留,读出始终是0。 DRy15:0:端口输入数据(y = 015) 这些位为只读并只能以字(16位)的形式读出。读出的值为对应I/O口的状态(0或1)。 GPIOx_ODR是可读可写的,作输入数据

10、寄存器,这个寄存器是32位的,并且只能是按16位进行编程操作。图3.3.3 数据输出寄存器ODRODRy31:16:保留。 ODRy15:0:端口输出数据(y = 015) 实验证实,要读取某端口输入的数据,要设置端口为输入模式,然后通过IDR寄出去读取才是正确的。ODR反应了作为输出时,上一次写出的数据。例如,刚刚设置GIPOD的4位端口为最高50M频率的推挽输出,现在将其置1,可以编程如下:GPIODODR=1<4;/等同于GPIOD->ODR|=0x10;如果写成 GPIOD->ODR=0x10有问题吗?有的,而且问题相当严重,因为不小心将GPIOD的其他端口都清0了!

11、这可不是想要的结果。如果使GIPOD的位4端口再输出低电平,编程应该如下:GPIOD>ODR&=((1<<4));/等同于GPIODODR=0xEF(11101111)如果使GIPOD的位4端口输出低电平,位5端口输出高电平,编程如下: GPIOD-ODR&=(1<4); GPIOD-ODR=1<5;有点尴尬了,需要两条语句!而且条条语句都有回读操作!这样的操作在需要高实时性的场合,就不太合适了,而且大家可以看到,同步性差,需要先将位4设置为低电平,然后将位5设置为高电平,这中间是有时间间隔的!因此,为了更加方便而且有效率的编程,必须介绍下端口位设

12、置/清除寄存器BSRR和端口位清除寄存器BRR设置。3. 端口位设置/清除寄存器(GPIOx_BSRR) (x=A.E) 通过设置BSRR或BRR寄存器来设置某一特定引脚的输出电平,而保持其他引脚输出不变,速度快,效率高。端口位设置/清除寄存器BSRR是专为方便编程设计的,该寄存器采用32位编程。BSRR寄存器结构如图3.3.4。图3。3.4端口位设置/清除寄存器BSRRBRy: 清除端口x的位y (y = 015) (端口x复位位y)。 这些位只能写入并只能以字(16位)的形式操作。 如果BRy为0:对对应的ODRy位不产生影响 1:如果BRy为1:清除对应的ODRy位为0BSy: 设置端口

13、x的位y (y = 015) (端口x设置位y) 这些位只能写入并只能以字(16位)的形式操作。如果BSy为0:对对应的ODRy位不产生影响 如果BSy为1:设置对应的ODRy位为1需要注意的是:如果同时设置了BSy和BRy的对应位,BSy位起作用。例如,将GIPOD的4位端口输出低电平,5位端口输出高电平,编程如下: GPIOD>BSRR=0x00100020;于是,一条语句就解决了,用示波器观察就会看到两位同时被设置。另外,如果想清除某位,而BSRR中的位清除在高16位,使用起来不是很方便,可以使用端口位清除寄存器BRR。4. 端口位清除寄存器(GPIOx_BRR) (x=A。.E) 端口位清除寄存器BRR也是专为方便编程设计的,该寄存器采用16位编程。它的结构如下:图3。3。5端口位清除寄存器BRR高16位保留,设置BRR低16位的值位1,就可以清除(置0)该位。例如,将GIPOD的4位端口输出低电平,编程如下:GPIOD>BRR=1<4; 这种操作避免了回读(=或=)效率高速度快!2。2.4 串口寄存器这部分请自行参考STM32中文用户手册.2。3 资料下载1.STM32开发板光盘链接:http:/pan。 密码:1xno2.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1