RISC-V MCU CH32V103测评
GPIO 控制
GPIOA B C D 都在 APB2
1.建立LED文件
以及led.c led.h
/*
* led.c
*
* Created on: Oct 30, 2020
* Author: Lenovo
*/
/* AHB - APB2 MAX 80MHz
*
GPIOA / GPIOB / GPIOC / GPIOD / TIM1 / SPI1 / USART1 / [ TouchKey / ADC ]
PA0-PA15 PB0-PB15 PC0-PA15 PD0-PD15 [ AIN0 - AIN15 AIN16 TempSensor AIN17 Vref
*/
#include "led.h"
void gpioInit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,GPIOSpeed_TypeDef GPIO_Speed,GPIOMode_TypeDef GPIO_Mode)
{
GPIO_InitTypeDef gpioSt;
gpioSt.GPIO_Pin = GPIO_Speed;
gpioSt.GPIO_Mode = GPIO_Mode;
gpioSt.GPIO_Speed = GPIO_Speed;
if(GPIOA == GPIOx)
{
<font color="#ff0000"> RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);</font>
}
else if(GPIOB == GPIOx)
{
<font color="#ff0000"> RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);</font>
}
else if(GPIOC == GPIOx)
{
<font color="#ff0000"> RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);</font>
}
else if(GPIOD == GPIOx)
{
<font color="#ff0000"> RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);</font>
}
GPIO_Init(GPIOx, &gpioSt);
}
void ledInit(void)
{
gpioInit(GPIOA,GPIO_Pin_0|GPIO_Pin_1,GPIO_Speed_50MHz,GPIO_Speed_50MHz);
GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1); //设置引脚输出高电平
}
void setledOn(void)
{
CLR_GPIOA(GPIO_Pin_0|GPIO_Pin_1);
}
void clrledOff(void)
{
SET_GPIOA(GPIO_Pin_0|GPIO_Pin_1);
}
#ifndef HARDWARE_LED_LED_H_
#define HARDWARE_LED_LED_H_
#include "ch32v10x_conf.h"
#define SET_GPIOA(x) GPIO_SetBits(GPIOA,x)
#define CLR_GPIOA(x) GPIO_ResetBits(GPIOA,x)
void gpioInit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,GPIOSpeed_TypeDef GPIO_Speed,GPIOMode_TypeDef GPIO_Mode);
void ledInit(void);
void setledOn(void);
void clrledOff(void);
#endif /* HARDWARE_LED_LED_H_ */
主函数
int main(void)
{
u16 i;
Delay_Init();
USART_Printf_Init(115200);
printf("SystemClk:%d\r\n",SystemCoreClock);
ledInit();
while(1)
{
setledOn();
Delay_Ms(1000);
clrledOff();
Delay_Ms(1000);
}
#if 0
ADC_Function_Init();
DMA_Tx_Init( DMA1_Channel1, (u32)&ADC1->RDATAR, (u32)TxBuf, 1024 );
DMA_Cmd( DMA1_Channel1, ENABLE );
ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_239Cycles5 );
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
Delay_Ms(50);
ADC_SoftwareStartConvCmd(ADC1, DISABLE);
for(i=0; i<1024; i++)
{
printf( "%04d\r\n", TxBuf[i] );
Delay_Ms(10);
}
while(1);
#endif
}
编译配置
效果:
|