ARM day6 (标准pin引脚启动)

这篇具有很好参考价值的文章主要介绍了ARM day6 (标准pin引脚启动)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

A7核

led.h

#ifndef __LED_H__
#define __LED_H__


//寄存器封装
//声明一个结构体
typedef struct {
	volatile unsigned int MODER;   //00
	volatile unsigned int OTYPER;  //04
	volatile unsigned int OSPEEDR; //08
	volatile unsigned int PUPDR;   //0C
	volatile unsigned int IDR;     //10
	volatile unsigned int ODR;     //14
}gpio_t;

#define GPIOE (gpio_t*)0x50006000
#define GPIOF (gpio_t*)0x50007000 

//引脚封装

#define GPIO_PIN_0 0
#define GPIO_PIN_1 1
#define GPIO_PIN_2 2
#define GPIO_PIN_3 3
#define GPIO_PIN_4 4
#define GPIO_PIN_5 5
#define GPIO_PIN_6 6
#define GPIO_PIN_7 7
#define GPIO_PIN_8 8
#define GPIO_PIN_9 9
#define GPIO_PIN_10 10
#define GPIO_PIN_11 11
#define GPIO_PIN_12 12
#define GPIO_PIN_13 13
#define GPIO_PIN_14 14
#define GPIO_PIN_15 15

//模式寄存器封装 0 1 2 3
typedef enum{
	INPUT,       //输入 0
	OUTPUT,      //输出 1
	ALT,         //2
	ANALOG,      //3
}gpio_moder_t;

//输出类型寄存器封装 
typedef enum{
	PP,        //推挽 0
	OD,        //开漏 1
}gpio_otyper_t;

//输出数据寄存器封装
typedef enum{
	LOW,             //低速
	MED,             //中速
	HIGH,            //高速
	WERY_HIGH,       //超高速
}gpio_ospeedr_t;


//上下拉电阻寄存器封装
typedef enum{
	NO_PUPDR,  //禁止 0
	PU,        //上拉 1
	PD,        //下拉 2
}gpio_pupdr_t;


//高低电平寄存器封装
typedef enum{
	GPIO_RESET_T,   //低电平 0
	GPIO_SET_T,     //高电平 1
}gpio_odr_t;

typedef struct{
	gpio_moder_t moder;     //模式      
	gpio_otyper_t otyper;   //输出类型
	gpio_ospeedr_t ospeedr; //输出速度
	gpio_pupdr_t pupdr;     //是否上下拉
}gpio_init_t;

//PE10  PF10  PE8
//函数1功能:GPIO初始化
//参数:1)GPIO组号  2)引脚编号  3)初始化相关值
//返回值:无
void hal_gpio_init(gpio_t* gpiox,unsigned int pin,gpio_init_t* init);


//开关灯
void operate_pin(gpio_t* gpiox,unsigned int pin,unsigned int gpio_status);

#endif

led.c

#include "led.h"


//初始化引脚
void hal_gpio_init(gpio_t* gpiox,unsigned int pin,gpio_init_t* init)
{
	//模式
	gpiox->MODER &= (~(0x3 << pin*2));
	gpiox->MODER |= (init->moder << pin*2);
	//类型
	gpiox->OTYPER &= (~(0x1 << pin));
	gpiox->OTYPER |= (init->otyper << pin);
	//速率
	gpiox->OSPEEDR &= (~(0x3 << pin*2));
	gpiox->OSPEEDR |= (init->ospeedr << pin*2);
	//上下拉
	gpiox->PUPDR &= (~(0x3 << pin*2));
	gpiox->PUPDR |= (init->pupdr << pin*2);
}

void operate_pin(gpio_t* gpiox,unsigned int pin,unsigned int gpio_status)
{
	if(gpio_status == GPIO_RESET_T)
		gpiox->ODR &= (~(0x1 << pin));
	else
		gpiox->ODR |= (0x1 << pin);
}


main.c

#include "led.h"

extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{
	int i,j;
	for(i = 0; i < ms;i++)
		for (j = 0; j < 1800; j++);
}

void led_init()
{
	//使能
	*(volatile unsigned int *)0x50000A28 |= (0x3 << 4);

	//初始化结构体
	gpio_init_t init = {OUTPUT,PP,LOW,NO_PUPDR};
	//初始化引脚
	hal_gpio_init(GPIOE,GPIO_PIN_10,&init);
	hal_gpio_init(GPIOF,GPIO_PIN_10,&init);
	hal_gpio_init(GPIOE,GPIO_PIN_8,&init);

}

int main()
{

	// LED灯初始化
	led_init();

	while(1)
	{
		operate_pin(GPIOE,GPIO_PIN_10,GPIO_SET_T);
		delay_ms(200);
		operate_pin(GPIOE,GPIO_PIN_10,GPIO_RESET_T);
		operate_pin(GPIOF,GPIO_PIN_10,GPIO_SET_T);
		delay_ms(200);
		operate_pin(GPIOF,GPIO_PIN_10,GPIO_RESET_T);
		operate_pin(GPIOE,GPIO_PIN_8,GPIO_SET_T);
		delay_ms(200);
		operate_pin(GPIOE,GPIO_PIN_8,GPIO_RESET_T);
	}
	return 0;
}

ARM day6 (标准pin引脚启动),ARM,arm开发,单片机,嵌入式硬件

M4核启动

gpio.c

/**
  ******************************************************************************
  * @file    gpio.c
  * @brief   This file provides code for the configuration
  *          of all used GPIO pins.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2023 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "gpio.h"

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/*----------------------------------------------------------------------------*/
/* Configure GPIO                                                             */
/*----------------------------------------------------------------------------*/
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/** Configure pins
*/
void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOF_CLK_ENABLE();
  __HAL_RCC_GPIOE_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10|GPIO_PIN_8, GPIO_PIN_RESET);

  /*Configure GPIO pin : PF10 */
  GPIO_InitStruct.Pin = GPIO_PIN_10;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  /*Configure GPIO pins : PE10 PE8 */
  GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_8;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

}

/* USER CODE BEGIN 2 */

/* USER CODE END 2 */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

main.c文章来源地址https://www.toymoban.com/news/detail-538671.html

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2023 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
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 */

  if(IS_ENGINEERING_BOOT_MODE())
  {
    /* Configure the system clock */
    SystemClock_Config();
  }

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
			HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_SET);
			HAL_Delay(100);
		  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET);
		  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_SET);
			HAL_Delay(100);
		  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET);
		  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_SET);
			HAL_Delay(100);
		  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_RESET);
		
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = 16;
  RCC_OscInitStruct.HSIDivValue = RCC_HSI_DIV1;
  RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  RCC_OscInitStruct.PLL2.PLLState = RCC_PLL_NONE;
  RCC_OscInitStruct.PLL3.PLLState = RCC_PLL_NONE;
  RCC_OscInitStruct.PLL4.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** RCC Clock Config
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_ACLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
                              |RCC_CLOCKTYPE_PCLK3|RCC_CLOCKTYPE_PCLK4
                              |RCC_CLOCKTYPE_PCLK5;
  RCC_ClkInitStruct.AXISSInit.AXI_Clock = RCC_AXISSOURCE_HSI;
  RCC_ClkInitStruct.AXISSInit.AXI_Div = RCC_AXI_DIV1;
  RCC_ClkInitStruct.MCUInit.MCU_Clock = RCC_MCUSSOURCE_HSI;
  RCC_ClkInitStruct.MCUInit.MCU_Div = RCC_MCU_DIV1;
  RCC_ClkInitStruct.APB4_Div = RCC_APB4_DIV1;
  RCC_ClkInitStruct.APB5_Div = RCC_APB5_DIV1;
  RCC_ClkInitStruct.APB1_Div = RCC_APB1_DIV1;
  RCC_ClkInitStruct.APB2_Div = RCC_APB2_DIV1;
  RCC_ClkInitStruct.APB3_Div = RCC_APB3_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

到了这里,关于ARM day6 (标准pin引脚启动)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机、ARM、嵌入式开发、Android 底层开发有什么关系?

    从我目前的见识来看: 单片机是个系统(比如:51、AVR、PLC...),其中包含了去除了输入输出之外的运算器、控制器、存储器,我们用程序可以非常直观的控制引脚电平的高低。最近很多小伙伴找我,说想要一些ARM的资料,然后我根据自己从业十年经验,熬夜搞了几个通宵,

    2024年02月02日
    浏览(67)
  • 探索嵌入式开发领域:单片机、ARM、Android底层的紧密联系

    作为一个曾编写ARM教程和参与Android产品开发的专家,我发现单片机、ARM、嵌入式开发和Android底层开发之间存在紧密的联系。对于那些希望在嵌入式开发领域发展的人来说,了解这些领域的知识至关重要。为了帮助你更好地学习这些内容,我总结了一些嵌入式资料,你可以在

    2024年02月11日
    浏览(46)
  • L16物联网ARM开发--开发环境搭建及平台及GPIO口操作平台介绍(day2、3)

    目录 一、MDK-ARM环境介绍及安装 二、STM32Cube简介及安装   STM32CubeMX安装 加载固件库 ​编辑  三、 STM32F0存储器映射 四、STM32启动文件分析 略 五、GPIO的基本概念及寄存器介绍1 1、GPIO接口简介  2、GPIO功能复用  3、GPIO寄存器介绍  GPIO工作原理框图: 五、点亮LED寄存器版(

    2024年02月01日
    浏览(53)
  • 【stm32f4 C++与C混合开发】建立keil5的ARM Compiler 6(AC6)标准库开发工程

    一:请先确保keil5的版本为5.30版本以上,笔者这里是5.36版本: 二:F4标准库的pack包本版是2.9.0以上,笔者这里是2.15版本: 上述资源可在https://zhuanlan.zhihu.com/p/262507061找到 提示:本工程创建用例基于正点原子的F407标准库例程 工程如下图所示: 把工程拷贝一份新工程到纯英文

    2024年02月15日
    浏览(116)
  • 2023.07.29 驱动开发DAY6

    通过epoll实现一个并发服务器 服务器 客户端 运行结果  

    2024年02月15日
    浏览(43)
  • ARM+Codesys标准通用型控制器

    整机工业级设计,通讯外设经过隔离保 护   电源宽 电 压设计(9~36V DC ) 丰 富 的通讯接口,满足多种场合控制和通讯需求   四 核工业级处理器,高性能,低功耗,高可靠性      机 身 无风扇设计,外壳小巧 搭载内核 1 00% 自主化大型实时操作系统 SylixOS,支持     POSI X  

    2024年02月09日
    浏览(49)
  • IMX6ULL ARM Linux开发板SD卡启动,SD卡的分区与分区格式化创建

    一、确定TF卡挂载到ubuntu上的设备名称及分区情况 1. 在ubuntu不接入TF卡的情况下, 使用df -lh /dev/sd*命令查看当前\\\"/dev/sd开头\\\"的设备。 2.将TF卡接入到ubuntu,再次使用df命令,进行查看,多出来的设备即是TF卡挂载到ubuntu的设备名称 如图所示,多出来的/dev/sdb1 /dev/sdb2即为TF卡的

    2024年02月04日
    浏览(42)
  • ARM单片机中断处理过程解析

    前言 中断,在单片机开发中再常见不过了。当然对于中断的原理和执行流程都了然于胸,那么对于ARM单片机中断的具体处理行为,你真的搞清楚了吗? 今天来简单聊一聊,ARM单片机中断处理过程中的具体行为是什么样的,搞清楚了这些,让你彻底理解中断是如何执行的。 掌

    2024年02月06日
    浏览(43)
  • day49 ARM

    2024年02月07日
    浏览(34)
  • arm: day8

    1.中断实验:按键控制led灯 流程: key.h key.c do_lrq.c main.c

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包