常用置位、清零解释及stm32f103寄存器点亮led

置位:|= , 清0:&=~

清0例:*(unsigned int*)0x40010C0C &=~(1<<0)

先让1左移0位,即

再全部取反,即

 

再与之相与,即....

我们知道1和1或0相与都为它自己本身,而0和0或1相与都为0,故达到了清0的作用 

置位例:0xABC6|=((1)<<3)

0xABC6=

首先,1左移3位,得到0000 0000 0000 1000

|运算符 0|0=0,0|1=1,1|0=1,1|1=0;即相同为0,不同为1

即1010 1011 1100 1110

如此以来就达到了置位的效果。

************************************************************************************************************

PB0使能

GPIOB起始地址

控制ODR寄存器

 配置IO口为输出(控制CRL寄存器)

 

  推挽输出主要目的为增强输出的负载能力。推挽既可以输出低电平也可以输出高电平;STM32的引脚一般是高阻态,但是推挽输出默认为低电平。

使能时钟(RCC_APB2ENR)

代码:

    //打开GPIOB端口的时钟
    *(unsigned int * )0x40021018 |= ( (1)<<3 );
    //配置IO口为输出
    *(unsigned int * )0x40010C00 |= ( (1)<<(4*0) );
    //控制ODR寄存器
  *(unsigned int * )0x40010C00 &=~(1<<0);

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: #include "stm32f10x.h" int main(void) { //Enable GPIOC Clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //Configure PC13 as output GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); //Turn on LED on PC13 GPIO_SetBits(GPIOC, GPIO_Pin_13); while(1); } ### 回答2: 下面是一个使用STM32F103C8T6芯片点一个LED灯的示例程序代码: #include "stm32f10x.h" int main(void) { // 初始化LED引脚 RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // 使能GPIOC时钟 GPIOC->CRH &= ~(GPIO_CRH_CNF13 | GPIO_CRH_MODE13); // 清除原有设 GPIOC->CRH |= GPIO_CRH_MODE13_0; // 设引脚为推挽输出 // 循环点LED灯 while (1) { GPIOC->BSRR |= GPIO_BSRR_BS13; // 位引脚,点LED灯 for (int i = 0; i < 100000; i++); // 延时一段时间 GPIOC->BSRR |= GPIO_BSRR_BR13; // 复位引脚,熄灭LED灯 for (int i = 0; i < 100000; i++); // 延时一段时间 } } 这个示例程序首先初始化了LED引脚,然后进入一个循环,每次循环中点LED灯,并延时一段时间,然后再熄灭LED灯并延时一段时间。实际上,这个循环就是一个不断重复的周期,LED灯在点和熄灭之间切换,从而实现了LED灯的闪烁效果。 需要注意的是,这个程序使用的是STM32标准外设库(Standard Peripheral Library),如果您使用的是STM32Cube或其他版本的库,则需要进行相应的调整。另外,此示例程序使用的是PC13引脚,您也可以更改为其他可用的LED引脚。 ### 回答3: 以下是一个简单的 STM32f103c8t6 点 LED 灯的程序代码: #include "stm32f10x.h" void GPIO_Init(void); int main(void) { GPIO_Init(); // 初始化GPIO while (1) { GPIO_SetBits(GPIOB, GPIO_Pin_12); // 点LED灯 } } void GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能GPIOB时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // GPIOB Pin 12 (对应板子上LED灯) GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO时钟频率 GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化GPIOB } 以上代码首先包含了相关的头文件"stm32f10x.h",然后定义了一个函数GPIO_Init()来初始化GPIO。在主函数main()中,首先调用GPIO_Init()函数来初始化GPIO。然后在while循环中,使用GPIO_SetBits()函数来点GPIOB的Pin 12(对应板子上的LED灯)。GPIOB的时钟必须在初始化之前被使能,这通过调用RCC_APB2PeriphClockCmd()函数来实现。GPIO_InitTypeDef结构体变量GPIO_InitStructure用于配GPIO的参数,包括使用的引脚、引脚模式和时钟频率。最后,主程序进入一个无限循环,始终保持LED灯处于点状态。 请注意,这只是一个基本的示例代码。实际应用中,还需要进行相应的配和其他处理来实现更多功能,例如使用按键控制LED灯的状态、使用定时器进行闪烁等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值