初识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 硬件接口