开发板学习日记之STM32H743-02 基础例程

由于我已经是从STM32F4过来的老鸟了,现在学STM32H7不再需要一步一步的学起,就是原先使用的是标准库现在需要熟悉HAL库的使用。

我将部分基础例程直接合并到一起,在自己新建的工程里面实现了这些功能:

当然 还是想吐槽一下正点原子的代码格式真是乱的一塌糊涂, 做项目还是要像安富莱那样写代码,等你工作了你就会知道,好的代码可以提高工作效率。建议大家读一读《代码的整洁之道》,好我们接下来开始讲解工程:

1.初始化流程

void Init_Pro(void)
{
    /* 使能L1 Cache */
    CPU_CACHE_Enable();
    
    HAL_Init();
    
    SystemClock_Config();
    
    delay_init(400);    
    LED_Init();
    Beep_Init();
    KEY_Init();
//    Exti_Init();
    Uart_Init(115200);
    printf("Power On\r\n");
    
//    IWDG_Init(IWDG_PRESCALER_64,500);
//    WWDG_Init(0X7F,0X5F,WWDG_PRESCALER_8);
//    Timer_Init(5000-1,20000-1);
    PWM_Init(500-1,200-1);//200M/200=1M的计数频率,自动重装载为500,那么PWM频率为1M/500=2kHZ
    PWM_Capture_Init();
    SDRAM_Init();    
  LCD_Init();                             //初始化LCD    
}

下面介绍一下:

* CPU_CACHE_Enable();

 

使能指令缓存和数据缓存,使用过ARM9的同事应该用过,加了这条指令后,执行速度飞快,但有时也会存在问题需要清空缓存等,或者立即同步缓存,来防止错误,有经验的朋友这里可以补充一下具体情况

* HAL_Init

这里其实有用的就是初始化定时器滴答,这样在后续就可以使用HAL_Delay这个延迟函数

*SystemClock_Config

这个是重点,设置时钟,HAL库不像标准库,标准库是把时钟设置放到system_stm32h7xx.c文件里面初始化的,也就是在进入main函数之前时钟就配置好了,HAL先以内部时钟配置,然后调用SystemClock_Config实现用户的时钟配置

/**
  * @brief  System Clock Configuration
  *         The system Clock is configured as follow : 
  *            System Clock source            = PLL (HSE BYPASS)
  *            SYSCLK(Hz)                     = 400000000 (CPU Clock)
  *            HCLK(Hz)                       = 200000000 (AXI and AHBs Clock)
  *            AHB Prescaler                  = 2
  *            D1 APB3 Prescaler              = 2 (APB3 Clock  100MHz)
  *            D2 APB1 Prescaler              = 2 (APB1 Clock  100MHz)
  *            D2 APB2 Prescaler              = 2 (APB2 Clock  100MHz)
  *            D3 APB4 Prescaler              = 2 (APB4 Clock  100MHz)
  *            HSE Frequency(Hz)              = 25000000
  *            PLL_M                          = 5
  *            PLL_N                          = 160
  *            PLL_P                          = 2
  *            PLL_Q                          = 2
  *            PLL_R                          = 2
  *            VDD(V)                         = 3.3
  *            Flash Latency(WS)              = 4
  * @param  None
  * @retval None
  */

我们可以通过CubeMX学习一下时钟如何配置的:

SYSCLK = HSE/ PLL_M*PLL_N/PLL_P

400 = 25 / 5 *160 /2   

我们知道这里就行了,后续深入学习时钟的时候,再讲解。这里要注意,学的时候可以循序渐进,先学个浅显的东西,这是很好的。但是,很多人特别是一部分硬件工程师,看到CubeMX这么好用,就靠着CubeMX来写代码,我们真正要做到的是学习其原理,要去读手册尤其是英文手册,别人是硬件工程师,只要能用就行了,我们是软件工程师,要做到的是出了问题,能够解决,很多时候你明明配置对了,仍然会遇到问题。

接下来很简单 就是开始初始化自己的外设:

    GPIO_InitTypeDef GPIO_Initure;
    __HAL_RCC_GPIOB_CLK_ENABLE();                    //开启GPIOB时钟

    GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1;            //PB0,1
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;          //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                     //上拉
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;      //高速
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);             //初始化GPIOB.0和GPIOB.1
    
  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);    //PB0置0
  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);    //PB1置1 

IO口的操作 无非就是: 按键做输入,开关控制做输出,AD采样做模拟,复用功能:串口/SPI/I2C/USB等等, 上下拉开漏/推挽根据外围电路需要设置。老掉牙的东西,也不想多说了,这里直接上传工程文件,里面包含了基础例程

https://download.csdn.net/download/liangwu5582066930/13073895

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值