用到外部时钟:UART,ADC,RTC
用到中断:UART,TIM
将高低电平写入对应引脚
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
读取对应引脚的电平状态
HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)
发送:
int fputc(int ch, FILE *f) 重定义中断发送,要包含#include "stdio.h"
HAL_UART_Transmit(&huart1,(u8 *)&ch,1,40); 串口发送数据
接收:
中断接收回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
HAL_UART_Receive_IT(&huart1,&uart_rxbuf,1); 开启串口中断接收
memset(&rx_buf,'\0',sizeof(rx_buf)); 将数组里的字符清0,要包含#include"string.h"
HAL_ADC_Start(&hadc1); 开启ADC转换
HAL_ADC_GetValue(&hadc1); 获取转换后的值,要得到电压值需再*3.3f/4096
void EEPROM_write(uint8_t addr,uint8_t data)
uint8_t EEPROM_read(uint8_t addr)
void MCP4017_write(uint8_t data)
uint8_t MCP4017_read() 读时需要*0.78740
输入捕获:
输入捕获中断回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
TIM2->CCER |=0x02; 调整下次捕获为下降沿触发
TIM2->CCER &=~0x02; 调整下次捕获为上升沿触发
__HAL_TIM_SetCounter(&htim2,0); 将计数值清零
__HAL_TIM_GetCounter(&htim2); 获取当前计数值
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1); 打开输入捕获中断
输出比较:
HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1); 打开PWM输出比较
HAL_RTC_GetTime(&hrtc,&rtc_time,RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc,&rtc_data,RTC_FORMAT_BIN);