芯源半导体CW32
直播中

张娟

8年用户 2248经验值
私信 关注
[经验]

cw32f030c8实现点灯

#include "CW32F0xx.h"

void delay(uint32_t count) { for(uint32_t i = 0; i < count; i++) { __NOP(); } }

int main(void) { // 启用GPIOA的时钟 SYSCTRL->AHBCLKENR |= (1 << 17);

// 配置GPIOA Pin 1为推挽输出 GPIOA->MODER  = ~(3 << (2 * 1)); GPIOA->MODER |= (1 << (2 * 1));

while(1) { // 点亮LED GPIOA->ODR |= (1 << 1);

delay(1000000); // 延时

// 熄灭LED
GPIOA->ODR  = ~(1 << 1);

delay(1000000); // 延时
1.
2.
3.
4.
5.
6.
} }

该程序使用CW32F030C8的内置GPIO控制LED灯的闪烁。它通过在延时循环中交替点亮和熄灭GPIOA Pin 1来实现LED的闪烁效果。您可以根据自己的需求进行修改和扩展。 请注意,这只是一个简单的示例程序,并没有包含完整的初始化和配置代码。在实际开发中,您需要根据具体要求对时钟、GPIO和其他外设进行适当的初始化和配置。

ODR

ODR是GPIO(通用输入输出)寄存器中的一个位,用于设置或读取特定引脚的输出状态。

在示例程序中,我们使用以下代码将GPIOA的ODR寄存器的特定位(1)设置为高电平(点亮LED):

c复制代码GPIOA->ODR |= (1 << 1);


这行代码使用按位或运算符(|)设置GPIOA的ODR寄存器的第1位。在这种情况下,我们要求第1位(对应GPIOA Pin 1)设置为1,以点亮LED。

类似地,我们使用以下代码将GPIOA的ODR寄存器的特定位(1)设置为低电平(熄灭LED):

c复制代码GPIOA->ODR  = ~(1 << 1);


这行代码使用按位与运算符( )对GPIOA的ODR寄存器的第1位进行操作。通过对第1位(对应GPIOA Pin 1)进行取反操作并与寄存器的其他位进行与运算,我们使第1位为0,从而熄灭LED。

通过对ODR寄存器进行适当的位操作,您可以设置或读取特定引脚的输出状态,以实现所需的功能。


更多回帖

发帖
×
20
完善资料,
赚取积分