Category Archives: 单片机与嵌入式

Embedded System

STM32微控制器之直接内存访问DMA的使用方法

直接内存访问(Direct Memory Access,DMA)是微控制器的一个外设,它的主要功能是用来搬运数据,而不需要占用CPU,即在传输数据的时候,CPU可以干其他的事情。

STM32F103微控制器的两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。

仿真软件:Proteus 8.11 SP0,仿真STM32F103R6微处理器的DMA:内存到外设USART1,代码如下:
Continue reading

STM32微控制器之全双工串口通信USART的使用方法

USART:通用同步/异步串行接收/发送器(Universal Synchronous/Asynchronous Receiver/Transmitter),通常称作USART。是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。
UART:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),它是在USART 基础上裁剪掉了同步通信功能,只有异步通信。
简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本上都是UART。
Continue reading

STM32微控制器之系统滴答定时器SysTick的使用方法

系统滴答定时器(System tick timer,简称SysTick),属于STM32微控制器内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit向下递减的计数器,计数器每计数一次的时间为1/SYSCLK。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复。

实验程序:利用SysTick,设置微处理器1ms产生一次中断,并实现精确延时函数,控制LED灯开关状态的反转。
Continue reading

STM32微控制器之外部中断/事件控制器EXTI的使用方法

STM32微控制器的外部中断/事件控制器(External Interrupt/Event Controller,EXTI)管理了控制器的中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。
Continue reading

STM32微控制器之GPIO按键控制LED灯开关状态的反转

Proteus仿真STM32F103R6微控制器GPIO的输入与输出,循环检测按键状态,控制LED灯开关状态的反转。GPIO输入:按键检测;GPIO输出:高低电平,点亮或关闭LED灯。

一、实验环境
微控制器:STM32F103R6;仿真软件:Proteus 8.11;开发工具:Keil MDK 5.33。

二、原理图
实验所用的8个LED灯,分别接在STM32微控制器的PB0,PB1,…,PB7,通过IO端口的高低电平控制;一个按键接在PC0,同时给按键并联一个小电容,实现硬件消抖。
Continue reading

STM32微控制器之跑马灯实验程序(标准固件库版)

STM32标准外设库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。

因此,使用固态函数库可以大大减少开发者开发使用片内外设的时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。同时,STM32官方还给出了大量的示例代码以供学习。
Continue reading

STM32微控制器之跑马灯实验程序(宏定义改进版)

寄存器版跑马灯实验程序,完全通过操作地址来实现的,不直观,而且容易出错。现在用存储器映像,添加宏定义,增强程序的可读性。

一、存储器映像头文件

#ifndef __STM32F10x_H
#define __STM32F10x_H

#define PERIPH_BASE			(0X40000000)
#define APB1PERIPH_BASE		PERIPH_BASE
#define APB2PERIPH_BASE		(PERIPH_BASE + 0X10000)
#define AHBPERIPH_BASE		(PERIPH_BASE + 0X20000)

#define RCC_BASE			(AHBPERIPH_BASE + 0X1000)
#define GPIOB_BASE			(APB2PERIPH_BASE + 0X0C00)

#define RCC_APB2ENR			*(unsigned int *)(RCC_BASE + 0X18)
#define GPIOB_CRL			*(unsigned int *)(GPIOB_BASE + 0X00)
#define GPIOB_CRH			*(unsigned int *)(GPIOB_BASE + 0X04)
#define GPIOB_ODR			*(unsigned int *)(GPIOB_BASE + 0X0C)
#endif 

Continue reading

STM32微控制器之跑马灯实验程序(寄存器基础版)

STM32微控制器入门最经典实验程序莫过于跑马灯。通过对STM32微控制器GPIO端口的高低电平控制,实现LED灯的打开与关闭,达到跑马灯的效果。

一、实验环境
微控制器:STM32F103R6;仿真软件:Proteus 8.11;开发工具:Keil MDK 5.33。

二、原理图
跑马灯实验所用的8个LED灯,分别接在STM32微控制器的PB0,PB1,…,PB7,通过IO端口的高低电平控制实现跑马灯效果。
Continue reading