目录:
参考连接:
https://doc.embedfire.com/products/link/zh/latest/mcu/stm32/ebf_stm32f407_batianhu_v1_v2/download/stm32f407_batianhu_v1_v2.html
取地址符号为&
,解地址符号为*
,使用如下,
int *p = &value; // 取地址用&
*p = 1; // 解地址用*
使用预编译宏来取消编译,
#if 0
...
#endif
常见的位操作有左移,右移,取反,与,或,异或,这部分参考c语言中文网,
第六个位置这个地方设置为1,其他地方不变,使用或操作|= (1<<6)
;
第六个位置这个地方设置为0,其他地方不变,使用与操作&= ~ (1<<6)
;
第六五位置设置为0,其他地方不变,&= ~(0x03)<<6
;因为0x03是11。
案例如下,孰能生巧,
由于51单片机内部已经实现了寄存器映射,所以在这里可以直接使用寄存器别名来进行访问。
电流从正极流向负极,从高压流向低压(因为存在电势差),电子流动方向和电流流向相反。
如果LED灯的电路图如下,则只需要控制P0,0端口将数值设置为0便可以将电路点亮,
则代码如下便可实现LED灯的开关,
寄存器映射指给寄存器地址映射一个别名,这个功能可以通过reg52.h
和stm32f10x.h
两个文件来实现。
LED灯对应的接口为PB0,则意味着是GPIOx_ODR
寄存器中的GPIOB0_ODR
。
GPIOx_ODR是指 general purpose intput output x _ Output data register,是通过ODR来控制LED灯开关的。
第二章 存储器和总线架构
中找到挂载在APB2地址总线下的GPIOB的绝对地址,我们需要通过CRL寄存器来告诉MCU, LED中的PB0为输出值,即配置IO口为 输出。
打开RCC的时钟寄存器。
最终我们的代码书写如下,
AHB1下
AHB1下
AHB1下
代码如下,stm32f4xx.h
文件内容,
main.c
文件内容,
407有144个引脚,引脚供电大部分是5V,GPIO属于引脚,但并不是所有引脚都属于GPIO;查找每一个GPIO功能通过数据手册查找。
GPIO功能框图如下,
I/O引脚就是芯片和PCB印刷电路板的解除方式,而I/O引脚的左侧则是芯片的内部电路。
BSRR 指的是bit set reset register,其中set是指置位,是低16位,输出高电平置1。reset是指复位,是指高16位,输出低电平置1。
输入输出是相对ARM芯片而言的,如果往芯片写数据叫输入,从芯片往外写数据叫输出。
在输入中TTL使得输入模拟信号,当大于1.8V时为高电平,当低于1.8V时为低电平。
输入的输入较为简单,输出则较为复杂,输出的流程图如下,