当前位置: 代码迷 >> 综合 >> STM32------>第一天,stm32的简介、cubemx介绍、开发方式、GPIO编程、HAL库如何操作寄存器、时钟树、urat及printf实现、外中断、ADC
  详细解决方案

STM32------>第一天,stm32的简介、cubemx介绍、开发方式、GPIO编程、HAL库如何操作寄存器、时钟树、urat及printf实现、外中断、ADC

热度:95   发布时间:2023-12-03 10:27:13.0

初识stm32

意法半导体的32位处理器

stm32 处理器命名规范:

 

cubemx介绍

cubemx 是一个图形化的配置工具, 还是一个代码生成器 , 配和 keil、iar等ide(开发环境)使用

官网地址: http://www.st.com/en/development-tools/stm32cubemx.html

开发方式

寄存器--------

标准库-------- 寄存器操作,将一些基本的寄存器操作封装成函数

HAL库---------将硬件接口抽象成了一个抽象层,从使用的角度来看,是与硬件无关的

gpio编程: 控制led2 

pb2 输出低, led2 亮

pb2 输出高, led2 灭

void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

函数功能: 控制GPIOx, 的引脚 GPIO_Pin, 输出 PinState(高、低)

HAL库如何操作寄存器

#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)

#define GPIOB_BASE            (AHB2PERIPH_BASE + 0x00000400)

#define AHB2PERIPH_BASE       (PERIPH_BASE + 0x08000000)

#define PERIPH_BASE           ((uint32_t)0x40000000U)

看到GPIOB =====48000400

  

手册查看GPIO 相关的寄存器

 例如:

typedef struct {unsigned int  r0;unsigned int r1;unsigned int r2;unsigned int res[3];unsigned int r3;unsigned int r4;}GPIODEF;int main(){GPIODEF  *gpiob = (GPIODEF*)0x48000400;printf("%p, %p, %p, %p, %p\n",&(gpiob->r0),&(gpiob->r1),&(gpiob->r2),&(gpiob->r3),&(gpiob->r4));return 0;}

时钟树

时钟系统是由振荡器(信号源)、定时唤醒器、分频器等组成的电路。常用的信号源有晶体振荡器和RC振荡器。

振荡器是用来产生重复电子讯号的电子元件。其构成的电路叫振荡电路,能将直流电转换为具有一定频率交流信号输出的电子电路或装置。

振荡器主要分为RC,LC振荡器和晶体振荡器。RC振荡器是采用RC网络作为选频移相网络的振荡器。LC振荡器是采用LC振荡回路作为移相和选频网络的正反馈振荡器。晶体振荡器的振荡频率受石英晶体控制。

HSI------>高速内部时钟

HSE----->高速外部时钟

LSI------->低速内部时钟

LSE------>低速外部时钟

uart,printf 实现

 

查看原理图, 最终发现 stm32 通过PA10, PA9 和 pc进行uart 通讯

函数名:

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)

功能:

从huart 串口接收size字节的数据, 保存到pData

void HAL_UART_RxCpltCallback (UART_HandleTypeDef *  huart)

函数功能: 中断方式的接收完成后, 系统会主动调用该函数

实现printf 打印, 打印到串口工具

int fputc(int c,  FILE *f)

{

while(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TXE) == RESET){}

huart1.Instance->TDR = c;

return c;

}

外中断

 

五向键的按键平时都为低, 某个方向的键被按下, 相应的口为高,

SN74HC32D 是一个级联的或门, 当D3&KEY输出高, 说明一个键被按下

D3&KEY  最终连到 PA8

void HAL_GPIO_EXTI_Callback (uint16_t  GPIO_Pin)

函数功能: 当外中断产生后, 系统会调用该函数。

GPIO_PIN :系统告诉, 哪个外中断?

adc

当不同的键按下, 如right键按下, RIGHT 为高, ADC_KEY 有不同的电压值

 ADC_KEY 最终连到处理器的PA0 

HAL_StatusTypeDef  HAL_ADC_Start (ADC_HandleTypeDef *  hadc)

函数功能: 使能adc, 开启一次转换

uint32_t   HAL_ADC_GetValue (ADC_HandleTypeDef *   hadc)

函数功能: 获取adc的转换结果

HAL_StatusTypeDef   HAL_ADC_Stop (ADC_HandleTypeDef *  hadc)

功能: 停止adcc 转换, 禁止adc 硬件接口

  相关解决方案