1. Purpose of the experiment
Use library functions to write, and be familiar with the use of GPIO.
2. Experimental principle
Use the PWM principle to realize the color change, so that the three kinds of monochromatic light have different duty ratios in one cycle.
3. Circuit diagram
4. Code implementation
main
#include "led.h"
#include "stdio.h"
#include "delay.h"
#include "stm32f10x.h"
u8 UART3_data,UART1_data;
u8 UART3_rcv[20],UART3_rcv_count;
u8 UART1_rcv[50],UART1_rcv_count,Uart1_finish;
int main(void)
{
delay_init();
led_init();
while (1)
{
//每1次改变色
int num;
for(num=1;num<=12;num++)
{
led_pwm(num);
}
led_mode_A();
}
}
led.c
#include "led.h"
#include "stdio.h"
#include "led.h"
#include "delay.h"
void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct_A,GPIO_InitStruct_B;
//打开引脚A,B的时钟
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
// 配置管脚
GPIO_InitStruct_B.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct_B.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStruct_B.GPIO_Speed=GPIO_Speed_50MHz;
// 配置管脚A
GPIO_InitStruct_A.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct_A.GPIO_Pin=GPIO_Pin_7;
GPIO_InitStruct_A.GPIO_Speed=GPIO_Speed_50MHz;
//A,B管脚的的初始化
GPIO_Init(GPIOB,&GPIO_InitStruct_B);
GPIO_Init(GPIOA,&GPIO_InitStruct_A);
//
GPIO_ResetBits(LED_R_GPIO_PORT,LED_R_GPIO_PIN);
GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
GPIO_ResetBits(LED_B_GPIO_PORT,LED_B_GPIO_PIN);
}
void led_pwm(int k)
{
int i=2000;//两秒变化周期
for (;i>0;i--)
{
//
GPIO_SetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
GPIO_SetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
switch(k)
{
case 1:
delay_us(200);
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_us(200);
GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_us(200);
GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_us(400);
break;
case 2:
delay_us(300);
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_us(300);
GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_us(300);
GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_us(100);
break;
case 3:
delay_us(50);
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_us(550);
GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_us(200);
GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_us(200);
break;
case 4:
delay_us(200);
GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_us(200);
GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_us(200);
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_us(400);
break;
case 5:
delay_us(300);
GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_us(300);
GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_us(300);
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_us(100);
break;
case 6:
delay_us(50);
GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_us(550);
GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_us(200);
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_us(200);
break;
case 7:
delay_us(200);
GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_us(200);
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_us(200);
GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_us(400);
break;
case 8:
delay_us(300);
GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_us(300);
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_us(300);
GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_us(100);
break;
case 9:
delay_us(50);
GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_us(550);
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_us(200);
GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_us(200);
break;
case 10:
delay_us(200);
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_us(200);
GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_us(200);
GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_us(400);
break;
case 11:
delay_us(300);
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_us(300);
GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_us(300);
GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_us(100);
break;
case 12:
delay_us(50);
GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_us(550);
GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_us(200);
GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_us(200);
break;
}
}
}
void led_mode_A(void)
{
GPIO_SetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
delay_ms(20000);
GPIO_ResetBits(LED_R_GPIO_PORT,LED_R_GPIO_PIN);
GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
delay_ms(20000);
GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
GPIO_SetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
delay_ms(20000);
GPIO_ResetBits(LED_B_GPIO_PORT,LED_B_GPIO_PIN);
}
led.h
#ifndef __LED_H
#define __LED_H
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
void led_init(void);
void led_pwm(int k);
void led_mode_A(void);
//引脚定义
/****************************************************/
//红色灯
#define LED_R_GPIO_PIN GPIO_Pin_7
#define LED_R_GPIO_PORT GPIOA
//绿色灯
#define LED_G_GPIO_PIN GPIO_Pin_0
#define LED_G_GPIO_PORT GPIOB
//蓝色灯
#define LED_B_GPIO_PIN GPIO_Pin_1
#define LED_B_GPIO_PORT GPIOB
/*******************************************************/
#endif
The code is very simple, please correct me~