STM32CubeMX工程配置——STM32F103C8T6 SPI通信

 一、STM32CubeMX工程配置
二、代码

 板子芯片是STM32F103C8T6 

一、STM32CubeMX工程配置

1.配置SYS:选择烧录方式和定时的时钟源

2.选择晶振作为时钟源,IWDG可以不设置

3.配置时钟,我板子用的是8M晶振 

4.设置SPI

二、代码

1.spi.c

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file    spi.c
  * @brief   This file provides code for the configuration
  *          of the SPI instances.
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2024 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "spi.h"

/* USER CODE BEGIN 0 */
/* 新增 */
#include "usart.h"
#include "delay.h"
#include "gpio.h"

extern uint16_t ADC_Value[12];
/* USER CODE END 0 */

SPI_HandleTypeDef hspi2;

/* SPI2 init function */
void MX_SPI2_Init(void)
{

  /* USER CODE BEGIN SPI2_Init 0 */

  /* USER CODE END SPI2_Init 0 */

  /* USER CODE BEGIN SPI2_Init 1 */

  /* USER CODE END SPI2_Init 1 */
  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize = SPI_DATASIZE_16BIT;
  hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH;
  hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi2.Init.NSS = SPI_NSS_SOFT;
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi2.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI2_Init 2 */
	  /* 新增 */
		AD7124_CS_H;  //片选拉高,失能AD7124
  /* USER CODE END SPI2_Init 2 */

}

void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(spiHandle->Instance==SPI2)
  {
  /* USER CODE BEGIN SPI2_MspInit 0 */

  /* USER CODE END SPI2_MspInit 0 */
    /* SPI2 clock enable */
    __HAL_RCC_SPI2_CLK_ENABLE();

    __HAL_RCC_GPIOB_CLK_ENABLE();
    /**SPI2 GPIO Configuration
    PB13     ------> SPI2_SCK
    PB14     ------> SPI2_MISO
    PB15     ------> SPI2_MOSI
    */
    GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_15;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_14;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /* USER CODE BEGIN SPI2_MspInit 1 */

  /* USER CODE END SPI2_MspInit 1 */
  }
}

void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
{

  if(spiHandle->Instance==SPI2)
  {
  /* USER CODE BEGIN SPI2_MspDeInit 0 */

  /* USER CODE END SPI2_MspDeInit 0 */
    /* Peripheral clock disable */
    __HAL_RCC_SPI2_CLK_DISABLE();

    /**SPI2 GPIO Configuration
    PB13     ------> SPI2_SCK
    PB14     ------> SPI2_MISO
    PB15     ------> SPI2_MOSI
    */
    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);

  /* USER CODE BEGIN SPI2_MspDeInit 1 */

  /* USER CODE END SPI2_MspDeInit 1 */
  }
}

/* USER CODE BEGIN 1 */

/**AD7142 CONFIG ******************************************************************************/
#if 0
/******************************************************************************************/

uint32_t Rd_Ary[4];

/**
  ******************************************************************************
  * @brief  AD7124_SPI_ReadWrite AD7124的读写SPI操作
  * @param  data 需要传输的数据
  * @return SPI读到的数据
  * @note   
  ******************************************************************************
  */
	
uint8_t AD7124SPIReadWrite(uint8_t Data)
{
		uint8_t  recv_buf;
		//MOSI主机发送给从机
	   AD7124_CS_L;
		HAL_SPI_Transmit(&hspi2,&Data,1,700);
		
		recv_buf = HAL_SPI_Receive(&hspi2,&recv_buf, 1,700);	//MISO接收从机数据
	   AD7124_CS_H;
	
		return recv_buf;

}

#endif

/* USER CODE END 1 */

 2.spi.h

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file    spi.h
  * @brief   This file contains all the function prototypes for
  *          the spi.c file
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2024 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __SPI_H__
#define __SPI_H__

#ifdef __cplusplus
extern "C" {
#endif

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

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

extern SPI_HandleTypeDef hspi2;

/* USER CODE BEGIN Private defines */
#define 		AD7124_CS_H      HAL_GPIO_WritePin(SPI2_NSS_GPIO_Port, SPI2_NSS_Pin, GPIO_PIN_SET)
#define 		AD7124_CS_L      HAL_GPIO_WritePin(SPI2_NSS_GPIO_Port, SPI2_NSS_Pin, GPIO_PIN_RESET)

/* USER CODE END Private defines */

void MX_SPI2_Init(void);

/* USER CODE BEGIN Prototypes */

uint8_t AD7124SPIReadWrite(uint8_t Data);
/* USER CODE END Prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __SPI_H__ */

  3.main.c

/**
  * @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 */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_ADC1_Init();
  MX_CAN_Init();
  MX_I2C1_Init();
  MX_SPI2_Init();
  MX_USART1_UART_Init();
  MX_IWDG_Init();
  /* USER CODE BEGIN 2 */
	/* timer *******************************************************************/
		s_MainSysTickCfg();
		s_TimVarInit();
	/* r_adc *******************************************************************/
		HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC1_Value_DMA, 10);
	/* can *******************************************************************/
//		CAN_User_Init(&hcan);
	/* SPI *******************************************************************/
			AD7124ChInt0();
			AD7142Init();
	/* IIC *******************************************************************/

	
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
		/* WDG clear *******************************************************************/
		HAL_IWDG_Refresh(&hiwdg);


	 /* private function *************************************************************/



		/* spi function ******************************************************************/
			AD7124SPIReadWrite(0x12);
		
    	

  }
  /* USER CODE END 3 */
}

### STM32CubeMX项目配置指南 #### 创建新工程 打开STM32CubeMX软件后,在启动界面点击“New Project”。此时会弹出一个窗口让用户选择目标微控制器型号。通过搜索功能找到所需的STM32系列芯片并双击确认,之后指定保存路径以及命名新建的工程项目文件夹[^1]。 #### 配置时钟树 进入主界面后可以看到左侧有多个标签页可供操作。“Clock Configuration”选项卡允许调整系统与时钟频率设置。这里可以通过拖拽滑块来改变PLL倍频器数值从而达到期望的工作频率;同时也能开启/关闭某些外设对应的APB/APBX总线分频开关以优化功耗表现。 #### 设置GPIO引脚属性 转到“Pinout & Configuration”页面可以直观地查看当前所选MCU的所有I/O端口分布情况,并对其用途作出具体定义——比如设定为模拟输入AIN、通用推挽输出GPW_O等等。对于每一个被修改过的管脚都会自动生成相应的初始化函数调用语句放在后续生成代码里。 #### 中断优先级安排 前往“I-O Settings”,再切换至子菜单下的“NVIC Setting”,在此处能够针对各个中断源单独设立抢占级别与响应次序。合理规划这些参数有助于提高程序运行效率并且避免潜在冲突问题的发生。 #### 外设模块启用 利用中间件库简化复杂任务处理流程的同时也支持直接激活内置硬件资源如USART串行通信接口、SPI同步数据传输协议等。只需勾选对应框体即可完成基本连接建立工作,更详细的定制化需求则需参照官方文档进一步探索实现方法。 ```c // 示例:使能 USART2 时钟 __HAL_RCC_USART2_CLK_ENABLE(); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值