stm32编程点亮开发板上的8只LED灯,使用位带和SysTick,第一只灯从左到右循环点亮,间隔时间为2秒。 
时间: 2023-05-13 09:05:33 浏览: 52
以下是使用位带和SysTick点亮stm32开发板上的8只LED灯,第一只灯从左到右循环点亮,间隔时间为2秒的完整代码:
```c
#include "stm32f10x.h"
#define LED_GPIO GPIOB
#define LED_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED_ALL 0xFF
#define BITBAND(addr, bitnum) ((addr & 0xF0000000) + 0x02000000 + ((addr & 0xFFFFF) << 5) + (bitnum << 2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
#define LED0_PIN 0
#define LED1_PIN 1
#define LED2_PIN 2
#define LED3_PIN 3
#define LED4_PIN 4
#define LED5_PIN 5
#define LED6_PIN 6
#define LED7_PIN 7
#define LED0 BIT_ADDR(&LED_GPIO->ODR, LED0_PIN)
#define LED1 BIT_ADDR(&LED_GPIO->ODR, LED1_PIN)
#define LED2 BIT_ADDR(&LED_GPIO->ODR, LED2_PIN)
#define LED3 BIT_ADDR(&LED_GPIO->ODR, LED3_PIN)
#define LED4 BIT_ADDR(&LED_GPIO->ODR, LED4_PIN)
#define LED5 BIT_ADDR(&LED_GPIO->ODR, LED5_PIN)
#define LED6 BIT_ADDR(&LED_GPIO->ODR, LED6_PIN)
#define LED7 BIT_ADDR(&LED_GPIO->ODR, LED7_PIN)
void SysTick_Handler(void)
{
static uint8_t led_num = 0;
LED0 = (led_num == 0) ? 0 : 1;
LED1 = (led_num == 1) ? 0 : 1;
LED2 = (led_num == 2) ? 0 : 1;
LED3 = (led_num == 3) ? 0 : 1;
LED4 = (led_num == 4) ? 0 : 1;
LED5 = (led_num == 5) ? 0 : 1;
LED6 = (led_num == 6) ? 0 : 1;
LED7 = (led_num == 7) ? 0 : 1;
led_num++;
if (led_num >= 8)
{
led_num = 0;
}
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(LED_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED_ALL;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_GPIO, &GPIO_InitStructure);
SysTick_Config(SystemCoreClock / 2);
while (1)
{
}
}
```
关于中文加密的问题,可以使用一些常见的加密算法,比如AES、DES等。具体实现可以参考相关的加密库或者算法实现。
相关推荐
















