历史上的今天
今天是:2025年01月31日(星期五)
2019年01月31日 | 【stm32f103】GPIO原理以及LED的应用(寄存器版)
2019-01-31 来源:eefocus
一.硬件原理图

有两个LED灯D1,D2,分别对应的PIN是PB6,PB7,低电平时点亮LED灯
二.寄存器图
通用GPIO寄存器一共有以下几个寄存器

寄存器可以参考 参考手册,在这里不做详细讨论
三.编程步骤:
1.使能响应的GPIO时钟
2.配置通用GPIO为推挽输出(因为默认低电平,所以此时LED灯会亮起来)
3.输出低电平,熄灭LED灯
4.再次通过程序点亮LED灯
四.程序讲解
代码比较简单,只有几行
/* 1.ENABLE GPIOB CLOCK */
RCC->APB2ENR|= RCC_APB2ENR_IOPBEN;
运行这个,可以在debug中看到GPIOB clock由disable变为enable


/* 2.CONFIG PB6 PB7 */
GPIOB->CRL|= GPIO_CRL_MODE6 | GPIO_CRL_MODE7;
此时发现PB6,PB7按照我们预期配置的那样变为输出模式

/* 3. PB6PB7 HIGH */
GPIOB->ODR|= GPIO_ODR_ODR6 | GPIO_ODR_ODR7;

此时可以看到ODR寄存器bit6,bit7被置1,此时LED灯熄灭
/* 4. PB6PB7 LOW */
GPIOB->ODR&= ~(GPIO_ODR_ODR6 | GPIO_ODR_ODR7);
执行到这的时候再次点亮LED灯

OK,通用GPIO就到这里了
另外:此处遗留一个问题,为什么运行到第四步的时候bit4也消失了呢?
->bit 4是Jlink的PIN脚,可能Jlink自己拉到低
史海拾趣
|
写了VHDL程序后,想功能仿真,verilog中的testbench有很多的书介绍,但是vhdl的testbench却很少很少,原因也有很多吧,主要是VHDL的testbench太麻烦,但是我却学到VHDL了,所以写testbench也只有用vhdl,现在才开始学习,希望与大家讨论学习。 这 ...… 查看全部问答> |
|
我用示波器测得时候总达不到微妙级延时示波器显示为2.5us - 7us范围,请帮分析一下? void Delay_us(int time) //1us { unsigned int val = (PCLK>>1)/1000000 - 1; //1us v_pPWMregs ...… 查看全部问答> |
|
我用的arm是at91rm9200 现在要通过串口向一个GPRS模块(gr64)发送AT命令 先定义了一个字符数组\"AT\\n\" 把它往串口里面写,貌似写是没问题的 按道理GR64应该返回“ATOK” 但是我接下来读串口却总是读出“AT\\n” 也就是说你写的什么,读出 ...… 查看全部问答> |
|
我们知道,PCI设备有三个空间——内存地址空间、IO地址空间和配置空间。由于PCI支持即插即用,所以PCI设备不是占用固定的内存地址空间或I/O地址空间,而是可以由操作系统决定其映射的基址。怎么配置呢?这就是配置空间的作用。 DW | Byte3 | Byte2 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 04:02 编辑 手上只有2章!1、微控制器电路模块制作2、微控制器外围电路模块制作三章--八章欢迎大家补充! … 查看全部问答> |




