接上文 【中科微CSM32RV003绿色开发板免费体验】开发板使用2
官方例程SYSTICK_Interrupt\SYSTICK_Interrupt\Systick为基础,
#include "headfile.h"
#define TICK 2000
uint8_t rgb_over = 1;
uint8_t is_qcding = 1;
uint8_t rgb_colour = 0;
uint8_t duty_num_b =100;
uint8_t d_num_b = 4; 、
void _close_all_led(){
GPIO_Write(GPIOA,PIN12, GPIO_SET);
GPIO_Write(GPIOA,PIN9, GPIO_SET);
GPIO_Write(GPIOA,PIN8, GPIO_SET);
}
、
void _RGB_timer_shade(){ 、
if(rgb_over){
duty_num_b += 4;
if(duty_num_b > 251){
rgb_over = 0;
duty_num_b = 255;
}
}else{
duty_num_b -= 4;
if(duty_num_b < 10){
rgb_over = 1;
duty_num_b = 10;
rgb_colour++;
if(rgb_colour > 7){
rgb_colour = 1;
}
}
}
}
、
void RGB_e( ){ 、
static uint8_t count = 0; 、
uint8_t dutynum = 255; 、
dutynum = duty_num_b; 、
if(is_qcding){
if(rgb_colour < 8){
、
if(rgb_colour == 4){
if(count <= dutynum){
GPIO_Write(GPIOA,PIN12,GPIO_RESET); 、GPIO_RESET
}else{
GPIO_Write(GPIOA,PIN12,GPIO_SET);、
}
if(count <= (dutynum/2)){ 、
GPIO_Write(GPIOA,PIN9,GPIO_RESET);
}else{
GPIO_Write(GPIOA,PIN9,GPIO_SET);
}
GPIO_Write(GPIOA,PIN8,GPIO_SET);
}else if(rgb_colour == 7){ 、
if(count <= (dutynum/2)){ 、
GPIO_Write(GPIOA,PIN12,GPIO_RESET);
}else{
GPIO_Write(GPIOA,PIN12,GPIO_SET);
}
if(count <= dutynum){
GPIO_Write(GPIOA,PIN8,GPIO_RESET);
}else{
GPIO_Write(GPIOA,PIN8,GPIO_SET);
}
GPIO_Write(GPIOA,PIN9,GPIO_SET);
}else{
if(count <= dutynum){
switch(rgb_colour) {
case 0:{ 、
GPIO_Write(GPIOA,PIN12,GPIO_RESET);
GPIO_Write(GPIOA,PIN9,GPIO_RESET);
GPIO_Write(GPIOA,PIN8,GPIO_RESET);
break;
}
case 1:{ 、
GPIO_Write(GPIOA,PIN12,GPIO_RESET);
GPIO_Write(GPIOA,PIN9,GPIO_SET);
GPIO_Write(GPIOA,PIN8,GPIO_SET);
break;
}
case 2:{ 、
GPIO_Write(GPIOA,PIN9,GPIO_RESET);
GPIO_Write(GPIOA,PIN12,GPIO_SET);
GPIO_Write(GPIOA,PIN8,GPIO_SET);
break;
}
case 3:{ 、
GPIO_Write(GPIOA,PIN8,GPIO_RESET);
GPIO_Write(GPIOA,PIN12,GPIO_SET);
GPIO_Write(GPIOA,PIN9,GPIO_SET);
break;
}
case 5:{ 、
GPIO_Write(GPIOA,PIN12,GPIO_RESET);
GPIO_Write(GPIOA,PIN9,GPIO_RESET);
GPIO_Write(GPIOA,PIN8,GPIO_SET);
break;
}
case 6:{ 、
GPIO_Write(GPIOA,PIN9,GPIO_RESET);
GPIO_Write(GPIOA,PIN8,GPIO_RESET);
GPIO_Write(GPIOA,PIN12,GPIO_SET);
break;
}
}
}else{
_close_all_led(); 、
}
}
count++;
if(count >= 255){ 、
count = 0;
}
}else{
count = 0;
rgb_colour = 0;
}
}else{
_close_all_led(); 、
}
}
int main(void)
{
RESET->NRST_EN =0;
Delay32M_ms(1000);
CLIC_Init();
SysClock_Crystal_Mode_Init();
UART_eeprintf_Init(UART1,115200);
ee_printf("SystemClk:%d\r\n", SystemCoreClock);
ee_printf("uart init:IC农民工\r\n");
NVIC_EnableIRQ(SysTick_IRQn);
SysTick_mtime->MTIME = 0;
SysTick_mtimecmp->MTIMECMP = TICK-1;
GPIO_MODE_Init(GPIOA,PIN8,GPIO_MODE_OUTPUT);
GPIO_MODE_Init(GPIOA,PIN9,GPIO_MODE_OUTPUT);
GPIO_MODE_Init(GPIOA,PIN12,GPIO_MODE_OUTPUT);
for(uint8_t i=0;i<10;i++)
{
GPIO_Toggle(GPIOA,PIN8);
Delay16M_ms(1000);
}
while(1){
}
}
void mTimer_IRQhandler(void) __attribute__((interrupt("SiFive-CLIC-preemptible")));
void mTimer_IRQhandler(void)
{
SysTick_mtimecmp->MTIMECMP += TICK-1;
RGB_e();
d_num_b--;
if(d_num_b==0){
d_num_b=3;
_RGB_timer_shade();
}
}
build:
Output file is default\Systick.elf with size 79.19 KB
Process terminated with status 0 (0 minute(s), 1 second(s))
0 error(s), 6 warning(s) (0 minute(s), 1 second(s))
完成。