STM32设置实例: (1)模拟I2C使用开漏输出_OUT_OD,接上拉电阻,能够正确输出0和1;读值时先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以读IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0); (2)如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用带上拉输入_IPU和浮空输入_IN_FLOATING和开漏...
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5 GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1--》PE.5 端口配置, 推挽输出 GPIO_Init(GPIOE, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz GPIO_SetBits(GPIOE,...
/*清零一字节变量中的某一位*/#defineCLEAR_BIT(x, bit) (x &= ~(1 << bit)) /* 清零第bit位 */ 3. 位、字节置1操作 /*int型变量中的某个字节置1*/#defineSET_LOW_BYTE0(x) (x |= 0x000000ff) /* 第0个字节置1 */#defineSET_LOW_BYTE1(x) (x |= 0x0000ff00) /* 第1个字节...
SET_BIT(((DMA_Stream_TypeDef *)huart->hdmarx->Instance)->CR, DMA_SxCR_DBM); __HAL_DMA_ENABLE(huart->hdmarx); } 5.1.2函数名称和传参类型 static void USART_DMAEx_MultiBuffer_Init(UART_HandleTypeDef *huart, uint32_t *DstAddress, uint32_t *SecondMemAddress, uint32_t DataLength) UAR...
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); assert_param(IS_GPIO_PIN(GPIO_Pin)); GPIOx->BSRR= GPIO_Pin; } 现在我们要进行一个gpio的位操作,如果是使用标准库,当单片机运行时则需要调用 GPIOx基地址,BSRR地址,GPIO_Pin地址,再对对应...
使用STM32库: GPIO_ResetBits(GPIOC, GPIO_Pin_4); //关LED5 GPIO_SetBits(GPIOC, GPIO_Pin_7); //开LED2 一般读操作: STM32_Gpioc_Regs->bsrr.bit.BR4 =1;// 1:清除对应的ODRy位为0 STM32_Gpioc_Regs->bsrr.bit.BS7 =1;// 1:设置对应的ODRy位为1 ...
Cortex-M就利用了额外的空间实现了称为位带(Bit-Banding)操作的硬件属性,该技术使用地址空间的两个不同区域来指向同一物理地址。在主位带区域,每个地址对应一个字节的数据,在“位带别名”区域中,每个地址对应同一个数据的一个位。 如下图所示。在CM3的寄存器映射图中有1MB的 bit band区,这里被称为位带区,与...
GPIO_SetBits(GPIOC, GPIO_Pin_7); //开LED2 一般读操作: STM32_Gpioc_Regs->bsrr.bit.BR4 =1;// 1:清除对应的ODRy位为0 STM32_Gpioc_Regs->bsrr.bit.BS7 =1;// 1:设置对应的ODRy位为1 如果使用位带别名区操作: STM32_BB_Gpioc_Regs->BSRR.BR[4] =1;// 1:清除对应的ODRy位为0 ...
比如点亮流水灯的工程,对于IO口的操作并不太复杂,初始化完成之后通过Setbit和Resetbit这两个函数就可以实现高低电平的输出。然后,可以试着改一下亮灭,增加一个按键控制,中断延时,等等。当你学到STM32的时候,说明已经有一定的基础了。这个时候我建议你直接通过STM32开发的产品去学习单片机,这样学完以后既学会了...