目录
三、串口USB TO TTL 与stm32F103核心板连接如下图所示
一、地址映射和寄存器映射
1.总线基地址
2.外设基地址
3.寄存器地址
此处说明:相对地址偏移 ,就是说相当于原来的地址是一个范围,加上地址偏移(加上偏移值)就是准确位置。
二、GPIO端口初始化
1.找到外设时钟的位置。此处用到GPIOB (时钟配置)
2.下面选择如图所示(输入输出模式设置 、最大速率设置)
此处说明:x的意思是无论是ABCDE都行。CRL代表低八位,CRH代表高八位。
三、串口USB TO TTL 与stm32F103核心板连接如下图所示
对应的接口:
PA9–RXD
PA10–TXD
3.3V–3V3
SND–GND
四、启动方式说明:
BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。
BOOT1=0 BOOT0=1(ISP方式)从系统存储器启动,这种模式启动的程序功能由厂家设置。BOOT1=1 BOOT0=1从内置SRAM启动,这种模式可以用于调试。
如图所示
五、程序下载
连线截图
六、用C语言实现流水灯的闪烁
1.代码
#define RCC_AP2ENR *((unsigned volatile int*)0x40021018)
//----------------GPIOA配置寄存器 ------------------------
#define GPIOA_CRH *((unsigned volatile int*)0x40010804)
#define GPIOA_ORD *((unsigned volatile int*)0x4001080C)
//----------------GPIOB配置寄存器 ------------------------
#define GPIOB_CRL *((unsigned volatile int*)0x40010C00)
#define GPIOB_ORD *((unsigned volatile int*)0x40010C0C)
//----------------GPIOC配置寄存器 ------------------------
#define GPIOC_CRH *((unsigned volatile int*)0x40011004)
#define GPIOC_ORD *((unsigned volatile int*)0x4001100C)
//-------------------简单的延时函数-----------------------
void Delay_ms( volatile unsigned int t)
{
unsigned int i;
while(t--)
for (i=0;i<800;i++);
}
//------------------------主函数--------------------------
int main()
{
int j=100;
RCC_AP2ENR|=1<<2; //APB2-GPIOA外设时钟使能
RCC_AP2ENR|=1<<3; //APB2-GPIOB外设时钟使能
RCC_AP2ENR|=1<<4; //APB2-GPIOC外设时钟使能
//这两行代码可以合为 RCC_APB2ENR|=1<<3|1<<4;
GPIOA_CRH&=0xFFF0FFFF; //设置位 清零
GPIOA_CRH|=0x00020000; //PA12推挽输出
GPIOA_ORD|=1<<12; //设置初始灯为亮
GPIOB_CRL&=0xFFFFFF0F; //设置位 清零
GPIOB_CRL|=0x00000020; //PB1推挽输出
GPIOB_ORD|=1<<1; //设置初始灯为灭
GPIOC_CRH&=0xF0FFFFFF; //设置位 清零
GPIOC_CRH|=0x02000000; //PC14推挽输出
GPIOC_ORD|=1<<14; //设置初始灯为灭
while(j)
{
GPIOA_ORD=0x1<<12; //PA12高电平
Delay_ms(3000000);
GPIOA_ORD=0x0<<12; //PA12低电平
Delay_ms(3000000);
GPIOB_ORD=0x1<<1; //PB1高电平
Delay_ms(3000000);
GPIOB_ORD=0x0<<1; //PB1低电平
Delay_ms(3000000);
GPIOC_ORD=0x1<<14; //PC14高电平
Delay_ms(3000000);
GPIOC_ORD=0x0<<14; //PC14低电平
Delay_ms(3000000);
}
}
2.准备工作
3.生成HEX文件
4.实验结果
七、实验心得
通过本次实验,对寄存器有了一定了解。实验过程中遇到很多问题,在查了很多资料和参考优秀的博客之后,学习到了很多,也解决了很多问题,在不懂之处,也有了明细的解释。有很多我值得学习的地方。我深知,在今后的学习道路上,任重而道远。
八、参考链接
基于汇编和C语言STM32流水灯依次闪烁_Laul Ken-Yi的博客-CSDN博客