打印
[应用相关]

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

[复制链接]
616|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
t60yz|  楼主 | 2021-2-28 23:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
由于我已经是从STM32F4过来的老鸟了,现在学STM32H7不再需要一步一步的学起,就是原先使用的是标准库现在需要熟悉HAL库的使用。

使用特权

评论回复
沙发
t60yz|  楼主 | 2021-2-28 23:46 | 只看该作者
我将部分基础例程直接合并到一起,在自己新建的工程里面实现了这些功能:

使用特权

评论回复
板凳
t60yz|  楼主 | 2021-2-28 23:48 | 只看该作者
当然 还是想吐槽一下正点原子的代码格式真是乱的一塌糊涂, 做项目还是要像安富莱那样写代码,等你工作了你就会知道,好的代码可以提高工作效率。建议大家读一读《代码的整洁之道》,好我们接下来开始讲解工程:

使用特权

评论回复
地板
t60yz|  楼主 | 2021-2-28 23:48 | 只看该作者
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    
}

使用特权

评论回复
5
t60yz|  楼主 | 2021-2-28 23:49 | 只看该作者
下面介绍一下:

* CPU_CACHE_Enable();

使用特权

评论回复
6
t60yz|  楼主 | 2021-2-28 23:50 | 只看该作者
使能指令缓存和数据缓存,使用过ARM9的同事应该用过,加了这条指令后,执行速度飞快,但有时也会存在问题需要清空缓存等,或者立即同步缓存,来防止错误,有经验的朋友这里可以补充一下具体情况

* HAL_Init

使用特权

评论回复
7
t60yz|  楼主 | 2021-2-28 23:51 | 只看该作者
这里其实有用的就是初始化定时器滴答,这样在后续就可以使用HAL_Delay这个延迟函数

*SystemClock_Config

使用特权

评论回复
8
t60yz|  楼主 | 2021-2-28 23:52 | 只看该作者
这个是重点,设置时钟,HAL库不像标准库,标准库是把时钟设置放到system_stm32h7xx.c文件里面初始化的,也就是在进入main函数之前时钟就配置好了,HAL先以内部时钟配置,然后调用SystemClock_Config实现用户的时钟配置

使用特权

评论回复
9
t60yz|  楼主 | 2021-2-28 23:52 | 只看该作者
/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  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
  */

使用特权

评论回复
10
t60yz|  楼主 | 2021-2-28 23:54 | 只看该作者
我们可以通过CubeMX学习一下时钟如何配置的:

使用特权

评论回复
11
t60yz|  楼主 | 2021-2-28 23:55 | 只看该作者

使用特权

评论回复
12
t60yz|  楼主 | 2021-2-28 23:56 | 只看该作者
SYSCLK = HSE/ PLL_M*PLL_N/PLL_P

400 = 25 / 5 *160 /2   

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

使用特权

评论回复
13
t60yz|  楼主 | 2021-2-28 23:56 | 只看该作者
接下来很简单 就是开始初始化自己的外设:
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 

使用特权

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

使用特权

评论回复
15
gygp| | 2021-3-4 13:00 | 只看该作者
意法半导体STM32H7高性能单片机:stm32h7  

使用特权

评论回复
16
chenci2013| | 2021-3-4 13:01 | 只看该作者
排在第一位的就是STM32H7系列MCU

使用特权

评论回复
17
biechedan| | 2021-3-4 13:01 | 只看该作者
STM32H7系列的单片机是ST这几年新推的一个系列

使用特权

评论回复
18
wangdezhi| | 2021-3-4 13:01 | 只看该作者
H7系列的浮点运算性能也是比较强悍的

使用特权

评论回复
19
isseed| | 2021-3-4 13:02 | 只看该作者
可以胜任一些信号处理的任务  

使用特权

评论回复
20
xietingfeng| | 2021-3-4 13:02 | 只看该作者
一般都是采用单核M7,鲜有M7+M4的这种组合

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

125

主题

954

帖子

0

粉丝