常用的是推挽输出和上拉输入
代码写在各个begin和end之间,才不会在重新生成工程的时候被清除掉
操作io
读引脚,返回值为GPIO_PIN_RESET 和GPIO_PIN_SET //可以直接写成0和1 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 写引脚,GPIO_PinState的可用性为GPIO_PIN_RESET 和GPIO_PIN_SET //可用性最好不要写0和1 void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); 翻转引脚电平 void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
|
外部中断
1.将引脚配置为GPIO_EXTI13,配置后在RCC选项中还要去使能NVIC 2.重写中断回调函数的实现,写在main函数外的begin和end之间 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == GPIO_PIN_13) { //判断是否为对应的外部中断引脚 //写逻辑 } if(GPIO_Pin == GPIO_PIN_5) { //不同引脚的外部中断写在用一个回调函数里面 //写逻辑 } }
|
定时器
1.设置时钟源clock source 为 internal clock 2.设置参数prescaler与counter period,定时时间=(prescaler+1 * period+1)/时钟频率 例:(31999+1 * 499+1 )/32000000=定时时间为0.5s 3.使能NVIC 设置
4.重写定时器回调函数 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM2) { //写定时器2的逻辑函数 //写逻辑 } if(htim->Instance == TIM3) { //不同定时器的逻辑函数写在用一个回调函数里面 //写逻辑 } }
5.启动定时器,写在定时器初始化后的注释中 HAL_TIM_Base_Start_IT(&htim2);
|
串口
1.connectivity-USART1配置串口 模式Asynchronous(异步) 配置好波特率以及串口的模式(发送与接收) 2.使能NVIC 设置 3.初始化发送与接收数据的位置,写在串口初始化的后面 HAL_UART_Transmit(&huart1, Tx_str1, sizeof(Tx_str1), 10000);//阻塞式发送 HAL_UART_Receive_IT(&huart1, &Rx_dat, 1);//非阻塞式接收 3.重写发送或接收完毕中断回调函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {//接收完毕中断回调函数 if(huart->Instance == USART1) { if(Rx_dat == 0x51) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET); } } }
|
串口常用函数
HAL库中串口发送的重要函数 ■阻塞式发送函数(初学者,推荐使用) HAL_Status TypeDef HAL_UART_Transmit(UART_Handle TypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); ■非阻塞式发送函数 HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_Handle TypeDef *huart, uint8_t *pData, uint16_t Size); ■发送完毕中断回调函数 void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); void HAL_UART_TxHalfCpltCallback(UART_Handle TypeDef *huart);
HAL库中串口接收的重要函数 ■阻塞式接收函数 HAL_StatusTypeDef HAL_UART_Receive(UART_Handle' TypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); ■非阻塞式接收函数(推荐使用) HAL_StatusTypeDef HAL_UART_Receive_JT(UART_Handle TypeDef *huart, uint8_t *pData, uint16_t Size); ■接收完毕中断回调函数 void HAL_UART_RxCpltCallback(UART_Handle TypeDef *huart); void HAL_UART_RxHalfCpltCallback(UART_Handle TypeDef *huart);
|
ADC
从PA0到PB1有十个通道可供选择(f103) 如需要使用中断要打开中断使能
查询法 void ADC_GetValue() { HAL_ADC_Start(&hadc1); //开启adc LED_ON(); if(HAL_OK == HAL_ADC_PollForConversion(&hadc1, 10)) {//转换查询adc是否转换ok ADC_Value = HAL_ADC_GetValue(&hadc1); ADC_Volt = ADC_Value * 3300 / 4096; //电压值 = 采样值 * 3.3v / 2的12次方 } UART_SendInfo(); LED_OFF(); HAL_ADC_Stop(&hadc1); //关闭adc }
中断法 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { if(hadc->Instance == ADC1) { ADC_Value = HAL_ADC_GetValue(&hadc1); ADC_Volt = ADC_Value * 3300 / 4096; //电压值 = 采样值 * 3.3v / 2的12次方 UART_SendInfo(); LED_OFF(); } } 在主函数中执行adc的打开 HAL_ADC_Start_IT(&hadc1);
|
OLED
在头文件文件夹中有oled对应的stm32cube对应的头文件 确认好配置移植进工程就可以了
|
文件下载地址: 点击下载