在进行IO口方向设置的时候经常见到如下设置方式
//IO方向设置 PC11
#define MPU_SDA_IN() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;}
#define MPU_SDA_OUT() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=3<<12;}
先把CRH和CRL管理 模式对照表贴出来进行说明
从同种可以看出CNF表示是输入输出不同模式下的状态,CNF代表的位为31:30或27:26或23:22……管理输入输出模式的是MODE位分别为29:28或25:24或21:20………….,在不同IO口上CNF和MODE共同占用一个十六进制的’F’也就是上述中的空出来的’0’。
下面说明为啥在使用PC11的时候是;
GPIOC->CRH&=0XFFFF0FFF;1
CRH和CRL其实功能是相同的,只是CRH管理引脚的高8位为Pin8-16,CRL管理引脚的低八位为Pin0-7,每个IO端口的位占用占用CRL或CRH的4个位,4个位中高2位为CNF低两位为MODE,那么在CRL中Pin0-7八个IO口每个4位占用4*8=32位刚好为0xFFFFFFFF,从低位到高位分别为0xFFFFFFF0代表0号IO口,0xFFFFFF0F代表1号IO口,0xFFFFF0FF代表2号IO口,,,,,,,,,,,,
在CRH中Pin8-15八个IO口每个4位占用4*8=32位刚好为0xFFFFFFFF,从低位到高位分别为0xFFFFFFF0代表8号IO口,0xFFFFFF0F代表9号IO口,0xFFFFF0FF代表10号IO口,0xFFFF0FFF代表11号IO口,,,,,,,,,,,
关键字:STM32 CRH CRL
引用地址:
STM32 CRH和CRL记录
推荐阅读最新更新时间:2024-03-16 16:12
STM32读保护功能和清除读保护功能设置
1、STM32对内部Flash的保护措施 所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问 - 写保护和读保护。 1)、读保护即大家通常说的 加密 ,是作用于整个Flash存储区域。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出: 通过调试器(JTAG或SWD); 从RAM中启动并执行的程序; 2)、写保护是以四页(1KB/页) Flash存储区为单位提供写保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志。 读与写设置的效果见下表: 读保护写保护 对Flash的操作功能
[单片机]
STM32学习笔记之GPIO(二)
首文提到了GPIO拥有八种工作方式: 4种输入模式: 输入浮空 输入上拉 输入下拉 模拟输入 4种输出模式: 开漏输出 开漏复用功能 推挽式输出 推挽式复用功能 3种最大翻转速度: -2MHZ -10MHz -50MHz 八种模式介绍及电路详解 输入浮空模式: 由于浮空输入一般多用于外部按键输入,结合图上的输入部分电路,我理解为浮空输入状态下,IO 的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。 输入上拉模式: 上拉输入/下拉输入/模拟输入:这几个概念很好理解,从字面便能轻易读懂。 输入下拉模式: 模拟模式: 开漏输出: 只可以输出强低电平,高电平得靠外部电阻拉高。输出端
[单片机]
stm32学习之复位和时钟
1、复位 STM32F支持三种复位形式,分别为系统复位、电源复位和备份区域复位。 1.1 系统复位 当以下事件中的一件发生时,产生一个系统复位: 1. NRST管脚上的低电平(外部复位) 2. 窗口看门狗计数终止( WWDG复位) 3. 独立看门狗计数终止( IWDG复位) 4. 软件复位( SW复位)(将Cortex-M3中断应用和复位控制寄存器中的SYSRESETREQ位置1, 可实现软件复位。) 5. 低功耗管理复位 可通过查看RCC_CSR控制状态寄存器中的复位状态标志位来确认复位事件来源。 1.2 电源复位(电源复位将复位除了备份区域外的所有寄存器,地址0x0000_0000~
[单片机]
stm32 USART中断标志位什么时候清除
USART_ClearITPendingBit(USART2,USART_IT_RXNE); 我放在中断处理函数里 怎么没有效果? 答: RXNE标志不能直接清除,读取USART- DR(就是读取接收到的数据)来清除RXNE标志。
[单片机]
STM32如何设置定时器
STM32如何设置定时器 下面以stm32的TIM2作为实例一步步配置成为定时器: 第一种 对定时器的基本配置 TIM_TimeBaseStructure.TIM_Period = 1000; //设置自动装载寄存器 TIM_TimeBaseStructure.TIM_Prescaler = 35999; //分频计数 TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //选择向上计数 TIM_TimeBaseInit(TIM2, &TIM_
[单片机]
一种无OS的STM32实用软件框架
介绍 一种无OS的STM32实用软件框架,包括任务轮询管理,命令管理器、低功耗管理、环形缓冲区等实用模块。系统中广泛利用自定义段技术减少各个模块间的耦合关系,大大提供程序的可维护性。 主要功能 支持模块自动化管理,并提供不同优先等级初始化声明接口。 支持任务轮询管理,通过简单的宏声明即可实现,不需要复杂的声明调用。 支持低功耗管理,休眠与唤醒通知。 支持命令行解析,命令注册与执行。 blink设备支持,统一管理LED、震动马达、蜂鸣器 使用说明 点击STM32嵌入式开发公众号文末的“阅读原文”,可以完整的工程代码,系统开发平台如下: MCU:STM32F401RET6 IDE:IAR 7.4或者K
[单片机]
STM32 USB SD卡读卡器和NAND FLASH模拟U盘
本次工程是要同时实现SD卡读卡器和NAND Flash模拟U盘的功能。结合之前的两个工程,稍稍修改下就可以了。 既然要实现两个盘,当然在usb_prop.c中的Max_Lun变量赋值为1,在USB_User组中同时添加fsmc_nand.c和sdio_sdcard.c这两个文件,在外设库中挺尸添加stm32f10x_sdio.c和stm32f10x_fsmc.c两个文件。 添加完之后,可能会有些许的错误,解决完后,我们就要修改下mass_mal.c文件了,这个文件本次要同时实现SD卡和NAND Flash的相关驱动代码的挂接,代码如下: uint32_t Mass_Memory_Size ; uint32_t Mass_Block
[单片机]
再造STM32---第六部分:自己写库—构建库函数雏形
本章参考资料: 《STM32F4xx 中文参考手册》 、 《STM32F429 规格书》 虽然我们上面用寄存器点亮了 LED,乍看一下好像代码也很简单,但是我们别侥幸以后就可以一直用寄存器开发。在用寄存器点亮 LED 的时候,我们会发现 STM32 的寄存器都是 32 位的,每次配置的时候都要对照着《STM32F4xx 参考手册》中寄存器的说明,然后根据说明对每个控制的寄存器位写入特定参数,因此在配置的时候非常容易出错,而且代码还很不好理解,不便于维护。所以学习 STM32 最好的方法是用软件库,然后在软件库的基础上了解底层,学习遍所有寄存器。 6.1 什么是 STM32 函数库: 以上所说的软件
[单片机]