1、端口使能
STM32L0与STM32Fx系列不同的是,它的GPIO复位寄存器 不存放在APB1或者APB2上,而是单独有一个 RCC_IOPRSTR 寄存器存放。
我这里使用PA5端口
方法一:借用映射好的地址使能
RCC->IOPENR |= RCC_IOPENR_GPIOAEN;
方法一:直接赋值使能
RCC->IOPENR |= 1<<0;
2、PA5端口模式设置为输出模式(对应位设置为:01)
注意:在端口模式设置之前,必须先清除该位原先设置,以确保模式设置正常
GPIOA->MODER&=0xFFFFF3FF; //清除原先设置
GPIOA->MODER|=1<<(5*2);//设置5口为输出模式
3、PA5端口输出类型设置为推挽输出PP
GPIOA->OTYPER=0x00000000;
GPIOA->OTYPER|=0<<5;
4、PA5端口输出速度设置
GPIOA->OSPEEDR|=0<<(5*2);
5、PA5端口上拉/下拉寄存器设置
设置之前一定要清除原先 *** 作;
GPIOA->PUPDR=0x24000000;
GPIOA->PUPDR|=0<<(5*2);
5、输出设置
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
GPIOA->ODR |= 1<<5;
HAL_Delay(500);
GPIOA->BRR |= 1<<5;
HAL_Delay(500);
}
现象:PA5端口连接的LED闪烁
完整代码
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
/* USER CODE BEGIN 2 */
RCC->IOPENR |= 1<<0;
GPIOA->MODER&=0xFFFFF3FF;
GPIOA->MODER|=1<<(5*2);
GPIOA->OTYPER=0x00000000;
GPIOA->OTYPER|=0<<5;
GPIOA->OSPEEDR|=0<<(5*2);
GPIOA->PUPDR=0x24000000;
GPIOA->PUPDR|=0<<(5*2);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
GPIOA->ODR |= 1<<5;
HAL_Delay(500);
//GPIOA->BRR |= 1<<5;
GPIOA->BSRR|= 1<<21;
HAL_Delay(500);
}
/* USER CODE END 3 */
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)