蓝桥杯嵌入式 学习记录

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)  //比较返回,1>2返回正数,1=2返回0,1<2返回负数
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();

    I2CWaitAck(); / I2CSendAck();
    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

__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,10) //设置PWM高脉冲

频率是5hz 相当于5秒变化5个周期,来回5次,10个方向变化

频率 :clk/(arr+1)*(psc+1) (单位:Hz)    //通过psc分频,频率再除以一个周期,获得产生波形的总频率
占空比:P = pulse/arr


HAL_TIM_IC_Start_IT  //高级定时器

HAL_TIM_IC_CaptureCallback  //内部捕获回调函数

时钟:80 000 000 /80(预分频系数) = 1 000 000 HZ= 1MHZ,所以计数一次为1us

最大计数值为65536(重装载值),约为65ms

__HAL_TIM_GET_COUNTER(&htim2) //获取定时器计数值

__HAL_TIM_SET_COUNTER(&htim2) //清零定时器计数值

当前产生的波型频率 = 分频后频率 / 定时器计数值

//EXIT

按键中断

HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) //回调函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值