【RISC-V MCU CH32V103测评】LED呼吸灯
[复制链接]
安装好编译器,接好线。(嘻嘻,没想到我真的找到一条2*5pin排线,免得让杜邦线搞得我心烦)
用MounRiver Studio打开他们的GPIO例程。
void GPIO_Toggle_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
以上主要是对PA0进行初始化。包括了使能PA0相关的GPIO端口时钟,配置GPIO引脚,
设置为推挽输出,设置输出速度。最后的GPIO_Init()是调用了库函数,初始化GPIOA。
int main(void)
{
u8 i=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
USART_Printf_Init(115200);
printf("SystemClk:%d\r\n",SystemCoreClock);
printf("GPIO Toggle TEST\r\n");
GPIO_Toggle_INIT();
while(1)
{
Delay_Ms(250);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i==0) ? (i=Bit_SET):(i=Bit_RESET));
}
}
以上是例程的main函数,他的printf函数是真的方便。
主要还是一个GPIO_WriteBit()来反复翻转PA0的状态。
稍微改一下,PA0接上LED就可以成呼吸灯了。
int main(void)
{
u8 i=0;
u16 t=0;
int MENU=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
USART_Printf_Init(115200);
printf("SystemClk:%d\r\n",SystemCoreClock);
printf("GPIO Toggle TEST\r\n");
GPIO_Toggle_INIT();
while(1)
{
// Delay_Ms(250);
// GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i==0) ? (i=Bit_SET):(i=Bit_RESET));
// GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_SET);
// Delay_Ms(250);
// GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_RESET);
if(MENU == 0)
{ //LED逐渐变亮
for(i = 0; i < 20; i++)
{
GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_SET); //LED1亮
Delay_Us(t); //延时t us
GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_RESET); //LED1灭
Delay_Us(501-t); //延时501-t us
}
t++;
if(t==500){//t加到500,改变状态值MENU
MENU = 1;
}
}
if(MENU == 1)
{ //LED逐渐变暗
for(i = 0; i < 20; i++)
{
GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_SET); //LED1亮
Delay_Us(t); //延时t
GPIO_WriteBit(GPIOA, GPIO_Pin_0,Bit_RESET); //LED1灭
Delay_Us(501-t); //延时501-t
}
t--;
if(t==1)
{
MENU = 0;
}
}
}
}
|