1、微机原理课程设计题目:基于 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 及其周边电路。图 2.1.1 MCU 及其周边电路5.参考电压6.备用电源3.启动配置2.复位电路1.唤醒电路4.高速晶振电路7.AD 输入8.低速晶振电路5.A
3、D 参考电路6.后备电池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 显示电路和其他接口按键
4、、LED 和蜂鸣器是常规的设备,除了 RESET 和 WAKEUP 按键外,开发板上还提供了 2 个按键,具有 4 个高有效的指示灯和蜂鸣器,电路如下图 2.1.8 所示。图 2.1.3 指示灯、按键、蜂鸣器电路2.2 相关资料2.2.1 STM32F103VET6( CORTEX M3 内核的 MCU)概况表项目 解读内核 ARM 32-bit Cortex-M3 CPU 核最高频率 72 MHz处理能力 1.25 DMIPS/MHz 平均每个时钟执行 1.25 条指令,这是比较高的处理能力。FLASH 512K 字节 Flash 存储器SRAM 64K 字节 SRAM电源和 I/O 输入范
5、围 2.0 到 3.6V 模数转换器 ADC 3 个 12 位 ADC,16 通道数模转换器 DAC 2 个 12 位 DAC,2 通道GPIO 80 个,可忍受 5V 的高压调试 串口调试 (SWD) 和 JTAG 接口定时器 8 个,TM1-TM8通信接口 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_OD
6、R)、一个 32 位的置位/复位寄存器(GPIOx_BSRR)、一个 16 位的复位寄存器(GPIOx_BRR)、一个 32 位的锁定寄存器(GPIOx_LCKR)。以上所有寄存器不允许按位访问或字节访问,必须按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由图
7、 3.3.1,CRL 寄存器共 32 位,4 位 1 组,每组控制 1 个引脚的配置(输入输出模式)。例如,假设这个计算器是 GPIOC-CRL,位 31-28 共 4 位,那么这 4 位控制了 GPIOC 的 7 脚的输入输出模式。假设要配置 GPIO 的 IO 口 y,那么需要写 CNFy1:0和 MODEy1:0。MODE1:0配置输入输出模式,输出的速率:00:输入模式(复位后的状态) 01:输出模式,最大速度10MHz 10:输出模式,最大速度2MHz 11:输出模式,最大速度50MHz CNF1:0取值及含义根据配置为输入和输出有不同: 输入模式下:00:模拟输入模式 01:浮空输
8、入模式(复位后的状态) 10:上拉/下拉输入模式 11:保留输出模式下00:通用推挽输出模式 01:通用开漏输出模式 10:复用功能推挽输出模式 11:复用功能开漏输出模式 CRH 寄存器除了控制的是高 8 位端口外,其结构和含义都与 CRL 完全相同。如果 IO 口是 0-7 号的话,则写 CRL 寄存器,如果 IO 口是 8-15 号的话,则写CR 寄存器。例如,要设置 GIPOD 的 4 位端口为最高 50M 频率的推挽输出,15 位端口位上拉下拉输入模式,应该设置如下:GPIOD-CRL 的 CNF41:0为 00,GPIOD-CRL 的 MODE41:0为 11。GPIOD-CRH
9、的 CNF71:0为 10,GPIOD-CRH 的 MODE71:0为 00。因此,编程如下:GPIOD-CRL /清掉对位 4 的配置GPIOD-CRL|=0X00030000; /写位 4 的位置为 0011GPIOD-CRH /清掉对位 15 的配置GPIOD-CRH|=0X8000000; /写位 15 的配置为 1000为什么要写的这么麻烦呢,就是因为只能 32 位操作,不能进行位操作的原因!如果是对整个 PD 口进行配置,才可以直接赋值。2. 端口输入数据寄存器(GPIOx_IDR)和 端口输出数据寄存器(GPIOx_ODR) GPIOx_IDR 是只读,作输入数据寄存器,这个寄存
10、器是 32 位的,并且只能是按 16 位进行编程操作。图 3.3.2 数据输入寄存器 IDRDRy31:16:保留,读出始终是 0. DRy15:0:端口输入数据(y = 015) 这些位为只读并只能以字(16 位)的形式读出。读出的值为对应 I/O 口的状态(0 或 1)。 GPIOx_ODR 是可读可写的,作输入数据寄存器,这个寄存器是 32 位的,并且只能是按 16 位进行编程操作。图 3.3.3 数据输出寄存器 ODRODRy31:16:保留。 ODRy15:0:端口输出数据(y = 015) 实验证实,要读取某端口输入的数据,要设置端口为输入模式,然后通过IDR 寄出去读取才是正确的。ODR 反应了作为输出时,上一次写出的数据。例如,刚刚设置 GIPOD 的 4 位端口为最高 50M 频率的推挽输出,现在将其置 1,可以编程如下:GPIOD-ODR|=1ODR|=0x10;如果写成 GPIOD-ODR=0x10 有问题吗?有的,而且问题相当严重,因为不小心将 GPIOD 的其他端口都清 0 了!这可不是想要的结果。如果使 GIPOD 的位 4 端口再输出低电平,编程应该如下:GPIOD-ODR