[应用相关] 学习日记之STM32H743-02 基础例程

[复制链接]
 楼主| t60yz 发表于 2021-2-28 23:46 | 显示全部楼层 |阅读模式
由于我已经是从STM32F4过来的老鸟了,现在学STM32H7不再需要一步一步的学起,就是原先使用的是标准库现在需要熟悉HAL库的使用。
 楼主| t60yz 发表于 2021-2-28 23:46 | 显示全部楼层
我将部分基础例程直接合并到一起,在自己新建的工程里面实现了这些功能:

68998603bbae7bd229.png
 楼主| t60yz 发表于 2021-2-28 23:48 | 显示全部楼层
当然 还是想吐槽一下正点原子的代码格式真是乱的一塌糊涂, 做项目还是要像安富莱那样写代码,等你工作了你就会知道,好的代码可以提高工作效率。建议大家读一读《代码的整洁之道》,好我们接下来开始讲解工程:
 楼主| t60yz 发表于 2021-2-28 23:48 | 显示全部楼层
1.初始化流程
  1. void Init_Pro(void)
  2. {
  3.     /* 使能L1 Cache */
  4.     CPU_CACHE_Enable();
  5.     
  6.     HAL_Init();
  7.     
  8.     SystemClock_Config();
  9.     
  10.     delay_init(400);    
  11.     LED_Init();
  12.     Beep_Init();
  13.     KEY_Init();
  14. //    Exti_Init();
  15.     Uart_Init(115200);
  16.     printf("Power On\r\n");
  17.     
  18. //    IWDG_Init(IWDG_PRESCALER_64,500);
  19. //    WWDG_Init(0X7F,0X5F,WWDG_PRESCALER_8);
  20. //    Timer_Init(5000-1,20000-1);
  21.     PWM_Init(500-1,200-1);//200M/200=1M的计数频率,自动重装载为500,那么PWM频率为1M/500=2kHZ
  22.     PWM_Capture_Init();
  23.     SDRAM_Init();    
  24.   LCD_Init();                             //初始化LCD    
  25. }
 楼主| t60yz 发表于 2021-2-28 23:49 | 显示全部楼层
下面介绍一下:

* CPU_CACHE_Enable();
 楼主| t60yz 发表于 2021-2-28 23:50 | 显示全部楼层
使能指令缓存和数据缓存,使用过ARM9的同事应该用过,加了这条指令后,执行速度飞快,但有时也会存在问题需要清空缓存等,或者立即同步缓存,来防止错误,有经验的朋友这里可以补充一下具体情况

* HAL_Init
 楼主| t60yz 发表于 2021-2-28 23:51 | 显示全部楼层
这里其实有用的就是初始化定时器滴答,这样在后续就可以使用HAL_Delay这个延迟函数

*SystemClock_Config
 楼主| t60yz 发表于 2021-2-28 23:52 | 显示全部楼层
这个是重点,设置时钟,HAL库不像标准库,标准库是把时钟设置放到system_stm32h7xx.c文件里面初始化的,也就是在进入main函数之前时钟就配置好了,HAL先以内部时钟配置,然后调用SystemClock_Config实现用户的时钟配置
 楼主| t60yz 发表于 2021-2-28 23:52 | 显示全部楼层
  1. /**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url]  System Clock Configuration
  3.   *         The system Clock is configured as follow : 
  4.   *            System Clock source            = PLL (HSE BYPASS)
  5.   *            SYSCLK(Hz)                     = 400000000 (CPU Clock)
  6.   *            HCLK(Hz)                       = 200000000 (AXI and AHBs Clock)
  7.   *            AHB Prescaler                  = 2
  8.   *            D1 APB3 Prescaler              = 2 (APB3 Clock  100MHz)
  9.   *            D2 APB1 Prescaler              = 2 (APB1 Clock  100MHz)
  10.   *            D2 APB2 Prescaler              = 2 (APB2 Clock  100MHz)
  11.   *            D3 APB4 Prescaler              = 2 (APB4 Clock  100MHz)
  12.   *            HSE Frequency(Hz)              = 25000000
  13.   *            PLL_M                          = 5
  14.   *            PLL_N                          = 160
  15.   *            PLL_P                          = 2
  16.   *            PLL_Q                          = 2
  17.   *            PLL_R                          = 2
  18.   *            VDD(V)                         = 3.3
  19.   *            Flash Latency(WS)              = 4
  20.   * @param  None
  21.   * @retval None
  22.   */
 楼主| t60yz 发表于 2021-2-28 23:54 | 显示全部楼层
我们可以通过CubeMX学习一下时钟如何配置的:
 楼主| t60yz 发表于 2021-2-28 23:55 | 显示全部楼层
 楼主| t60yz 发表于 2021-2-28 23:56 | 显示全部楼层
SYSCLK = HSE/ PLL_M*PLL_N/PLL_P

400 = 25 / 5 *160 /2   

我们知道这里就行了,后续深入学习时钟的时候,再讲解。这里要注意,学的时候可以循序渐进,先学个浅显的东西,这是很好的。但是,很多人特别是一部分硬件工程师,看到CubeMX这么好用,就靠着CubeMX来写代码,我们真正要做到的是学习其原理,要去读手册尤其是英文手册,别人是硬件工程师,只要能用就行了,我们是软件工程师,要做到的是出了问题,能够解决,很多时候你明明配置对了,仍然会遇到问题。
————————————————
 楼主| t60yz 发表于 2021-2-28 23:56 | 显示全部楼层
接下来很简单 就是开始初始化自己的外设:
  1. GPIO_InitTypeDef GPIO_Initure;
  2.     __HAL_RCC_GPIOB_CLK_ENABLE();                    //开启GPIOB时钟

  3.     GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1;            //PB0,1
  4.     GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;          //推挽输出
  5.     GPIO_Initure.Pull=GPIO_PULLUP;                     //上拉
  6.     GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;      //高速
  7.     HAL_GPIO_Init(GPIOB,&GPIO_Initure);             //初始化GPIOB.0和GPIOB.1
  8.     
  9.   HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);    //PB0置0
  10.   HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);    //PB1置1 
 楼主| t60yz 发表于 2021-2-28 23:58 | 显示全部楼层
IO口的操作 无非就是: 按键做输入,开关控制做输出,AD采样做模拟,复用功能:串口/SPI/I2C/USB等等, 上下拉开漏/推挽根据外围电路需要设置。老掉牙的东西,也不想多说了,这里直接上传工程文件,里面包含了基础例程
gygp 发表于 2021-3-4 13:00 | 显示全部楼层
意法半导体STM32H7高性能单片机:stm32h7  
chenci2013 发表于 2021-3-4 13:01 | 显示全部楼层
排在第一位的就是STM32H7系列MCU
biechedan 发表于 2021-3-4 13:01 | 显示全部楼层
STM32H7系列的单片机是ST这几年新推的一个系列
wangdezhi 发表于 2021-3-4 13:01 | 显示全部楼层
H7系列的浮点运算性能也是比较强悍的
isseed 发表于 2021-3-4 13:02 | 显示全部楼层
可以胜任一些信号处理的任务  
xietingfeng 发表于 2021-3-4 13:02 | 显示全部楼层
一般都是采用单核M7,鲜有M7+M4的这种组合
您需要登录后才可以回帖 登录 | 注册

本版积分规则

187

主题

1189

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部