STM32F103RCT6寄存器点灯学习
STM32F103RCT6寄存器点灯学习
一、J_LINK下载调试器学习
1. J-Link的两种下载接口
1.JTAG
后续补充
2.SWD
本次下载选用的时SWD,其中接线使用到了SWDIO、VCC、GND、SWCLK四个接口,接口图如下:
注:使用时可别忘了相应驱动哈,不然狠狠的给你罢工
二、学习过程
1.相关寄存器学习
1)RCC_APB2ENR
RCC_APB2ENR | APB2外设时钟使能寄存器 |
---|---|
偏移地址 | 0x18 |
IOPAEN[2] | GPIOA时钟使能 1:使能 0:关闭 |
RCC起始地址:0x40021000
2)GPIOx_CRH
GPIOx_CRH | 端口配置高寄存器 |
---|---|
偏移地址 | 0x04 |
CNF8[3:2] | 端口相应位模式配置 |
MODE8[1:0] | 端口相应位输出模式配置 |
GPIOA起始地址:0x40010800
输入输出模式配置(CNF)
输出速度配置(MODE)
注意:配置输入时,MODE应配置为00
3)GPIOx_ODR
GPIOx_ODR | 端口输出寄存器 |
---|---|
偏移地址 | 0x0c |
[31:16] | 保留位,始终读为0 |
[15:0] | 可位操作,相应位对应相应的端口位 |
GPIOA起始地址:0x40010800
三、程序及流程解读
1.代码
全在下面了哦,看官们,第一次写文章,紧张的很呐,紧张的很
/*******************************************************************************************
*该方法比较简陋,但非常精悍直接,就直接操作相应寄存器地址里面的值。
*流程:1.GPIOA时钟使能
* 2.推挽模式配置
* 3.输出速度设置
* 4.控制LED亮灭
* 5.这些地址都是我上面写的寄存器的,可以参考着理解
*******************************************************************************************/
unsigned int i = 0;
*(unsigned int *)0x40021018 |= 1<<2; //GPIOA时钟使能
*(unsigned int *)0x40010804 &= ~(0xf); //通用推挽输出
*(unsigned int *)0x40010804 |= 2; //最大输出速度2Mhz
while(1)
{
*(unsigned int *)0x4001080c &= ~(1<<8); //低电平点亮
一个简单的延时,嘿哈
for(i=0; i<50000; i++);
*(unsigned int *)0x4001080c |= 1<<8; //高电平熄灭
for(i-0; i<50000; i++);
}
2.过程中遇到的问题整理
1)复用推挽输出和通用推挽输出有什么区别?
复用推挽输出的IO受内部外设控制,如定时器的PWM、如SPI的MOSI、MISO等。
普通的推挽输出,IO受ODR控制,如果设置为复用推挽输出,IO就不再受ODR控制。
2)程序再三验证没问题,也成功下载,就是没效果,为什么?
一个偶然的机会,我给板子上插上了个USB,灯闪了,但是还是不明所以,随后经过学习发现,J_LINK下载调试器的VCC接口不向板子供电,只是起一个监测目标板电压的功能。以下是我整理的相关知识,不想打了,放截图吧。
好了,没啦,最后祝周末愉快,哇现在6:45下班疯狂往家冲。奥里给!!!