文章目录
一、STM32最小系统板简介
STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。
STM32F103C8T6单片机采用LQFP48封装设计,芯片一共引出44只引脚,其中A口有A0-A15共16个引脚,B口有B0-B15共16个引脚,C口有C13-C15共3个引脚,D口有D0-D1共两个引脚。
引脚功能图:
电路原理图:
由原理图,发光二极管LED0一端也经1KΩ电阻接到3.3V的VCC,另一端则接到PC13上。因此,想要让二极管发光的话需要让PC13输出低电平。
二、程序设计思路
(1)查找数据手册,对端口寄存器进行配置
(2)配置参数:
void LEDInit( void )
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRH&=0XFFFFFFF0;
GPIOA->CRH|=0X00000003;//PA8 推挽输出
GPIOA->ODR|=1<<8; //PA8 输出高
RCC->APB2ENR|=1<<3; //使能PORTB时钟
GPIOB->CRH&=0XFFFFFF0F;
GPIOB->CRH|=0X00000030;//PB9 推挽输出
GPIOB->ODR|=1<<9; //PB9 输出高
RCC->APB2ENR|=1<<4; //使能PORTC时钟
GPIOC->CRH&=0XFF0FFFFF;
GPIOC->CRH|=0X00300000; //PC13 推挽输出
GPIOC->ODR|=1<<13; //PC13 输出高
}
(3)绑定led变量与引脚地址
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define LED0 MEM_ADDR(BITBAND(GPIOA_ODR_Addr,8)) //LED0为PA8引脚
#define LED1 MEM_ADDR(BITBAND(GPIOB_ODR_Addr,9)) //LED1为PB9引脚
#define LED2 MEM_ADDR(BITBAND(GPIOC_ODR_Addr,13))//LED3为PC13引脚
volatile unsigned long * LED_[3]={0}; //四个LED的数组
(4)通过操作led数组实现流水灯
int main(void)
{
LEDInit();
unsigned int flag=0;//点亮LED标志
LED_[0]=&LED0;
LED_[1]=&LED1;
LED_[2]=&LED2; //给地址数组进行赋值
while (1)
{
if(flag>2)
{
flag=0;
}
*LED_[flag]=0; //LED亮
Delay_ms(500); //延时
*LED_[flag]=1; //LED灭
flag++;
}
}
三、使用proteus仿真
1.新建工程,添加元器件
菜单栏→P,选择型号
元件连线:
2.导入keil5编译生成的.hex文件
3.仿真效果
四、上板验证
编译下载,烧录程序。