一、C8T6最小系统板介绍
STM32F103C8T6基于 ARM 32位 Cortex™-M3内核,电压使用范围是2.0V ~ 3.6V,工作频率最高可以达到72MHz,内部采用64K或128K字节 Flash程序存储器,以及高达20K字节的 SRAM数据存储器;内置 CRC循环冗余校验以及 96位编码( 24位的十六进制数)的芯片唯一序列号
STM32F103C8T6单片机采用LQFP48封装设计,芯片一共引出44只引脚,其中A口有A0-A15共16个引脚,B口有B0-B15共16个引脚,C口有C13-C15共3个引脚,D口有D0-D1共两个引脚。
STM32F103C8T6的最小系统板,其最小系统板就是一个最精简的电路,精简到只能维持MCU的最基本的正常工作。最小系统一般由外部复位电路、外部时钟电路以及MCU本体构成。
二、设计思路与代码
(1)根据下图,对端口寄存器进行配置:
配置参数代码如下:
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 输出高
}
(2)通过地址数组赋值实现流水灯
建立地址数组,将流水灯的地址存放进数组中,最终通过对数组内的地址的值进行赋值,实现流水灯功能。
建立数组代码:
#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引脚地址的数组
主函数代码:
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++;
}
}
三、仿真
(1)我们在进行STM32最小系统的仿真时需要先进行电源线配置,如下所示:
菜单栏→设计→配置供电网→将VDDA加入VCC供应→将VSSA加入GND供应
(2)添加元件
(3)元件连线如下
(4)导入 .hex 文件
双击芯片,设置.hex文件路径
(5)仿真效果:
四、板级效果
总结
通过对STM32寄存器进行操作完成流水灯项目,了解了STM32的工作原理。