- 一. 初始化
- 【总线基地址】
- 【外设基地址】
- 二. c实现流水灯
- 【项目设置】
- 1. 添加设备
- 2. 修改参数
- 【代码】
- 【利用mcuisp烧录程序】
- 【实验结果】
一. 初始化 【总线基地址】说在开头:这篇博客很多东西还没有认真弄好以至于草草提交,后期有精力了会尽力认真去搞的
2021.10.24
| 总线名称 | 总线基地址 | 相对外设基地址的偏移 |
|---|---|---|
| APB1 | 0x4000 0000 | 0x0 |
| APB2 | 0x4001 0000 | 0x0001 0000 |
| APB3 | 0x4001 8000 | 0x0001 8000 |
| 外设名称 | 外设基地址 | 相对 APB2 总线的地址偏移 |
|---|---|---|
| GPIOA | 0x4001 0800 | 0x0000 0800 |
| GPIOB | 0x4001 0C00 | 0x0000 0C00 |
| GPIOC | 0x4001 1000 | 0x0000 1000 |
| GPIOD | 0x4001 1400 | 0x0000 1400 |
| GPIOE | 0x4001 1800 | 0x0000 1800 |
| GPIOF | 0x4001 1C00 | 0x0000 1C00 |
| GPIOG | 0x4001 2000 | 0x0000 2000 |
- 点击图示按钮
- 勾选图示设备
- 勾选Create HEX File
勾选后,运行main.c时,生成相关的.hex文件;
hex文件用于烧录到开发板上;
- 改为相关的芯片
main.c
#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);
}
}
【利用mcuisp烧录程序】
【实验结果】问题1:步骤三,读取器件信息时,经常读取失败
问题2:有时候存在个别灯不亮
都可能时因为芯片没有插好,再使劲把它往面包板里插一下
参考文章:
https://blog.csdn.net/weixin_52288941/article/details/120741229?spm=1001.2014.3001.5501
https://blog.csdn.net/qq_60678931/article/details/120753360?spm=1001.2014.3001.5501



