#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寄存器进行适当的位操作,您可以设置或读取特定引脚的输出状态,以实现所需的功能。
|