STM32G431RBT6 HAL库使用记录
//LED
gpio口配置输出时
置0或1函数,HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
锁存器 PD2,置1时打开,PC8到PC15可以正常读写
//KEY
gpio口配置输入时
读取当前值函数,HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
KEY读取值,逻辑if(key1 == 0){
HAL_Delay(10);
if(key1 == 0){
while(key1 == 0;
return 1;)}}
//UART
HAL_UART_RxCpltCallback //弱定义,可重新拿出写入main,数据完全接受完成后调用
当HAL_UART_Receive_IT调用的时候,会进入中断,串口中断模式接收
因为中断接收函数只能触发一次接收中断,所以我们需要在中断回调函数中再调用一次中断接收函数
具体流程:
1、初始化串口
2、在main中第一次调用接收中断函数
3、进入接收中断,接收完数据 进入中断回调函数
4、修改HAL_UART_RxCpltCallback中断回调函数,处理接收的数据,
5、回调函数中要调用一次HAL_UART_Receive_IT函数,使得程序可以重新触发接收中断
//LCD
"stdio.h"
"string.h"
strcmp(const char *s1, const char *s2)
memset(void *a, int b, size_t c)
sprintf(char * restrict, const char * restrict, ...);
LCD_DisplayStringLine(u8 Line, u8 *ptr)
//ADC
HAL_ADC_Start(&hadcx) 启动adc数据
HAL_ADC_GetValue(&hadcx) 获取adc值
//EE
u8 i2c_read(u8 add)
{
unsigned char val;
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(add);
I2CWaitAck();
I2CSendByte(0xa1);
I2CWaitAck();
val = I2CReciveByte();
I2CStop();
return val;
}
u8 i2c_write(u8 add, u8 data)
{
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(add);
I2CWaitAck();
I2CSendByte(data);
I2CWaitAck();
I2CStop();
}
//TIM
HAL_TIM_base_Start_IT(&htimx) //计时溢出进入tim_base回调函数 溢出值计算:(arr+1)*(psc+1) / clk = 溢出进入回调函数时间
HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) //里写入自己算法
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1) 启动PWM 周期clk/(arr+1)*(psc+1) (单位:Hz)
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,10) //设置PWM占空比,高脉冲hz 占空比p = 高脉冲 / psc
占空比P = pulse/per *100%
HAL_TIM_IC_Start_IT



