开发STM32MP1,离不开一个好开发板

本文介绍了STM32MP1系列的米尔MYD-YA157C开发板,该板采用高性能STM32MP157处理器,具有丰富的接口如千兆以太网、WIFI/蓝牙,适用于工业制造、医疗等领域。文章详述了开发板的硬件设计、软件资源及韦东山老师的配套教程,为用户从MCU过渡到MPU提供有力支持。

前言: STM32MP1系列的出现吸引了很多STM32新老用户的关注,但是很多的人都会担心一个问题:以前是基于Cortex M系列MCU进行开发,对于cortex-A架构的处理器以及Linux系统都不熟悉如何高效地从MCU跨越到MPU是大家都关心的话题。

该套件由核心板MYC-YA157C和底板MYB-YA157C组成。该平台采用STM32MP157系列高性能处理器,提供了高性能显示,千兆以太网,WIFI/蓝牙,RS232/RS485/CAN等丰富接口。贴合应用场景的产品定义,稳定可靠的硬件设计,丰富的软件和学习资源,是一块值得推荐的STM32MP1开发板。


图1 米尔MYD-YA157C开发板


一、STM32MP157超强芯片
      该开发平台采用ST公司STM32MP157AAC3处理器作为主控平台,这是ST公司在2019年推出的首款MPU,也是一颗超强双核cortex-A7加单核M4的芯片,主频可达650Mhz,芯片含有丰富的资源,满足用户对于图像界面的日常需求,支持各种存储器接口和丰富的通信接口。

图2  STM32MP1系列结构框图
      米尔的板卡搭配了巨大容量的内存,包括4GB eMMC和512MB DDR,可以加载丰富的系统资源,还包含电源管理IC以及千兆以太网PHY,能充分发挥该芯片的强劲性能。

二、以应用为导向,功能丰富,多

第2章 Cortex-M4 GPIO 编程 2.1 实验目的 熟悉 STM32CubeIDE 工具软件的使用。 掌握 STM32CubeIDE 软件的基本设计流程和设计步骤,能够使用工具进行设计、编程。 学习 GPIO 口的使用方法,掌握如何利用 STM32MP157A 芯片的 I/O 口控制LED。 2.2 实验环境 FS-MP1C 开发平台 ST-Link 仿真器 STM32CubeIDE 开发软件 PC 机 XP、Window7/10 (32/64bit) 2.3 实验原理 只要是对硬件操作,就要首先查看原理图。查看外设是和模块的 MCU 的哪个引脚相连。FS-MP1C 开发平台上的 LED 的亮灭状态,与芯片上的引脚 I/O 输出电平有关。 FS-MP1C 开发平台上 LED 的 I/O: 常用引脚PC7,PF1,PI11,PI10,以PC7为例,当给PC7一个高电平时,三极管导通,LED4形成压差,将有电流通过,LED4亮,当PC7为低电平时三极管关闭,没有电流通过,LED4灭,LED5,LED6,LED7同理。 2.4 实验步骤 (1)打开 STM32CubeIDE->File->New->STM32 Project (2)可以在左侧搜索框内输入芯片型号 STM32MP157A 进行搜索,选择对应芯片,点击 Next (3)填写工程名,点击Finish。 (4)然后进入配置页面,进行相关配置。 (5)在搜索框内搜索PC7,对应引脚会闪烁,左键单击设置为GPIO_Output 需要注意一下,和其他单片机不同,还需要继续设置 “ Pin Reservation”给“ Cortex-M4”,否则 STM32CubeMX 不会生生成 GPIO 初始化相关代码。 具体操作:在刚才选择的所有引脚上,鼠标右键选择 “ Pin Reservation”->“ Cortex-M4”。 对PC7进行相应配置,点击Categories分类栏,选择System Core的GPIO,右侧即可对PC7引脚做相应配置。 (6)点击 Devic Configuration Tool Code Generation按钮自动生成代码。 (7)工程编译 (8)运行,选择模式 运行下载即可。 2.5 实验代码解析 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET); //调用HAL库函数中的HAL_GPIO_WritePin函数,此处即PC7引脚为低电平,由PC7 Configuration->GPIO output level->Low自动生成。 GPIO_InitStruct.Pin = GPIO_PIN_7; //选择第7号引脚 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //由PC7 Configuration->Output Push Pull自动生成,为推挽输出 GPIO_InitStruct.Pull = GPIO_NOPULL; //由PC7 Configuration-->GPIO Pull-up/Pull-down->NoPull-up/ No Pull-down自动生成,为没有上拉下拉电阻。 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; //由PC7 Configuration->Maximum output speed->Low自动生成,表示低速模式。 HAL_GPIO_Init(GPIOC, &amp;GPIO_InitStruct); //对PC7进行上述配置的初始化 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_SET); //设置PC7输出为高电平 HAL_Delay(1000); //调用HAL库函数里面的延时函数,这里代表延时1000ms HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET); //设置PC7输出为低电平 2.6实验现象 LED4循环亮灭 2.7 扩展实验 实验1:控制LED4,LED5,LED6,LED7四个灯一起闪烁。 实验2:控制LED4,LED5,LED6,LED7四个灯从左到右流水亮灭。 实验3:通过PB6控制蜂鸣器的响灭 实验4:通过PF6控制马达震动 第二次课实验报告 实验分析: 这个实验需要掌握的什么知识 实验原理: 简单介绍一下实验的步骤 实验核心代码:(代码每一句话需要加注释) 实验结果:(运行结果照片) 第3章 Cortex-M4 按键扫描 3.1 实验目的 熟悉 STM32CubeIDE 工具软件的使用。 掌握 STM32CubeIDE 软件的基本设计流程和设计步骤,能够使用工具进行设计、编程。 学习 GPIO 口的使用方法,掌握如何利用 STM32MP157A 芯片的 I/O 口读取按键状态。 3.2 实验环境 FS-MP1C 开发平台 ST-Link 仿真器 STM32CubeIDE 开发软件 PC 机 XP、Window7/10 (32/64bit) 3.3 实验原理 本实验主要通过调用函数 HAL_GPIO_ReadPin 读取开发板上按键。 KEY3 的 IO口状态,控制 LED 灯的点亮和关闭状态。 该实验需要使用到开发板上的 LED 灯,按键,相关硬件电路如下: 独立按键有四个,KEY3,KEY4,KEY5,KEY6,对应PE9,PG2,PG1,PG0,4个I/O口,注意初始状态时,开关断开,各个引脚初始状态为高电平。以KEY3为例,当KEY3按下时PE9为低电平,利用STM32读取PE9的状态,当PE9为低电平时,LED4点亮。 3.4 实验步骤 (1) 打开 STM32CubeIDE->File->New->STM32 Project (2) 可以在左侧搜索框内输入芯片型号 STM32MP157A 进行搜索,选择对应芯片,点击 Next (3) 填写工程名,点击Finish。 (4)然后进入配置页面,进行相关配置。 (5)在搜索框内搜索PC7,对应引脚会闪烁,左键单击设置为GPIO_Output 需要注意一下,和其他单片机不同,还需要继续设置 “ Pin Reservation”给“ Cortex-M4”,否则 STM32CubeMX 不会生生成 GPIO 初始化相关代码。 具体操作:在刚才选择的所有引脚上,鼠标右键选择 “ Pin Reservation”->“ Cortex-M4”。 对PC7进行相应配置,点击Categories分类栏,选择System Core的GPIO,右侧即可对PC7引脚做相应配置。 再在搜索框内搜索PE9,按照如上方法对PE9进行相关配置 (6)点击 Devic Configuration Tool Code Generation按钮自动生成代码。 (7)写好程序以后工程编译 (8)运行,选择模式 3.5实验代码解析 GPIO_InitStruct.Pin = GPIO_PIN_9;//选择第9号引脚 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;//选择输入模式 GPIO_InitStruct.Pull = GPIO_PULLUP;//有上拉 HAL_GPIO_Init(GPIOE, &amp;GPIO_InitStruct);//端口E if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_9)==GPIO_PIN_RESET) {//如果读取到PE9为低电平,即按键按下 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_SET);//灯亮 } else//按键放开PE9为高电平 { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);//灯不亮 } 3.6实验现象 当按下KEY3灯亮,放开灯灭。 3.7扩展实验 当KEY6按下奇数次,蜂鸣器响灭,当KEY6按下偶数次停止 当KEY5按下奇数次流水灯显示,当KEY5按下偶数次流水灯停止 当KEY4按下马达奇数次震动,当KEY4按下偶数次马达停止 第三次课实验报告 实验分析: 这个实验需要掌握的什么知识 实验原理: 简单介绍一下实验的步骤 实验核心代码:(代码每一句话需要加注释) 实验结果:(运行结果照片) 第4章 Cortex-M4 按键外部中断 4.1 实验目的 掌握 STM32CubeIDE 软件的基本设计流程和设计步骤,能够使用工具进行设计、编程、 。 学习 GPIO 口的使用方法,掌握如何利用 STM32MP157A 芯片的 I/O 口作为外部中断输入。 4.2 实验环境 FS-MP1C 开发平台 ST-Link 仿真器 STM32CubeIDE 开发软件 PC 机 XP、Window7/10 (32/64bit) 4.3实验原理 本实验的原理主要是,通过主板上按键的外部中断方式读取键值即 IO 口状态,控制 LED 点亮、熄灭查看实验现象。配置 IO 口外部中断的步骤: 使能 IO 口时钟,初始化 IO 口模式,触发条件。 配置中断优先级( NVIC),并使能中断。 在中断服务函数中调用外部中断共用入口函HAL_GPIO_EXTI_IRQHandler 编写外部中断回调函数。通过以上几个步骤的设置,就可以正常使用外部中断了。 PG0对应外部中断0(GPIO_EXIT0)功能; PG1对应外部中断1(GPIO_EXIT1)功能; PG2对应外部中断2(GPIO_EXIT2)功能; PE9对应外部中断9(GPIO_EXIT9)功能。 现在设置KEY6为外部中断功能,放按键按下进入中断服务子程序, 控制LED4的亮灭。 4.4实验步骤 (1) 打开 STM32CubeIDE->File->New->STM32 Project (2) 可以在左侧搜索框内输入芯片型号 STM32MP157A 进行搜索,选择对应芯片,点击 Next (3) 填写工程名,点击Finish。 (4)然后进入配置页面,进行相关配置。 在搜索框内搜索PC7,对应引脚会闪烁,左键单击设置为GPIO_Output 需要注意一下,和其他单片机不同,还需要继续设置 “ Pin Reservation”给“ Cortex-M4”,否则 STM32CubeMX 不会生生成 GPIO 初始化相关代码。 具体操作:在刚才选择的所有引脚上,鼠标右键选择 “ Pin Reservation”->“ Cortex-M4”。 对PC7进行相应配置,点击Categories分类栏,选择System Core的GPIO,右侧即可对PC7引脚做相应配置。 再在搜索框内搜索PG0,按照如上方法对PG0进行相关配置 PG0对应外部中断0(GPIO_EXIT0)功能,并且点击Categories分类栏,选择System Core的NVIC功能启动EXTI lin0 interrupt功能。 (5)点击 Devic Configuration Tool Code Generation按钮自动生成代码。 (6)写好程序以后工程编译 (7)运行,选择模式 4.5实验代码解析 系统会在stm32mp1xx_it.c程序中自动生成中断服务子程序入口函数 当按键按下时触发中断(下降沿触发),进入中断服务子程序 EXTI0_IRQHandler(void)中LED4引脚的状态反转。 4.6实验现象 KEY6按下LED4状态反转 4.7扩展实验 利用外部中断完成 第四次课实验报告 实验分析: 这个实验需要掌握的什么知识 实验原理: 简单介绍一下实验的步骤 实验核心代码:(代码每一句话需要加注释) 实验结果:(运行结果照片) 第5章 Cortex-M4 TIM 定时器中断 5.1 实验目的 熟悉 STM32CubeIDE 工具软件的使用。 掌握 STM32CubeIDE 软件的基本设计流程和设计步骤,能够使用工具进行设计、编程 。 学习通用定时器的使用方法,掌握如何利用 STM32MP157A 芯片的通用定时器定时产生中断。 5.2 实验环境 FS-MP1C 开发平台 ST-Link 仿真器 STM32CubeIDE 开发软件 PC 机 XP、Window7/10 (32/64bit) 5.3 实验原理 STM32 系列微控制器具有多种定时器,其中包括基本定时器,通用定时器,高级定时器。几种定时器功能比较: 1、基本定时器:主要运用 定时器计数及驱动 DAC 2、通用定时器:定时器定时计数、输入捕获、输出比较、PWM 输出、使用外部信号控制定时器和定时器互连的同步电路 3、高级定时器:通用定时器 所有功能、带死区控制和紧急刹车,可用于PWM 控制电机。 本实验以通用定时器 TIM3 为例实现定时计数,计数到设置值后触发中 断改变 LED 灯亮灭状态。 从上图我们可以看到,基本定时器主要由下面几部分组成: 时钟源:定时器要实现计数必须有个时钟源,基本定时器时钟只能来自内部时钟,高级控制定时器和通用定时器还可以选择外部时钟源或者直接来自其他定时器等模式。 控制器:定时器控制器控制实现定时器功能,控制定时器复位、使能、计数是其基础功能,基本定时器还专门用于 DAC 转换触发。 计数器:基本定时器计数过程主要涉及到三个寄存器内容,分别是计数器寄存器 (TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR),这三个寄存器都是16位有效数字,即可设置值为0至65535。上图中预分频器PSC,它有一个输入时钟CK_PSC 和一个输出时钟 CK_CNT。输入时钟 CK_PSC 来源于控制器部分,基本定时器只有内部时钟源所以 CK_PSC 实际等于 CK_INT。在不同应用场所,经常需要不同的定时频率,通过设置预分频器 PSC 的值可以非常方便得到不同的CK_CNT,实际计算为: fCK_CNT=fCK_PSC/(PSC[15:0]+1) 经过上面分析,知道定时事件生成时间主要由 TIMx_PSC 和TIMx_ARR 两个寄存器值决定,这个也就是定时器的周期。比如我们需要一个1s 周期的定时器,具体这两个寄存器值该如何设置内。 假设,先设置TIMx_ARR 寄存器值为 9999,即当 TIMx_CNT 从 0 开始计算,刚好等于9999 时生成事件,总共计数 10000 次,那么如果此时时钟源周期为 100us 即可得到刚好 1s 的定时周期。接下来问题就是设置 TIMx_PSC 寄存器值使得CK_CNT 输出为 100us 周期(10000Hz)的时钟。预分频器的输入时钟 CK_PSCMHz,所以设置预分频器值为(6400-1)即可满足中断时间: 1/(TIMxCLK/(PSC+1))* (ARR+1) TIMxCLK 内部时钟 PSC 分频器的值 ARR 重装寄存器的值 比较寄存器的值 5.4实验步骤 (1) 打开 STM32CubeIDE->File->New->STM32 Project (2) 可以在左侧搜索框内输入芯片型号 STM32MP157A 进行搜索,选择对应芯片,点击 Next (3) 填写工程名,点击Finish。 (4)然后进入配置页面,进行相关配置。 点击Categories分类栏,Timers里面选择Tim3,M4模式。 对TIM3进行相应的配置。 对NVIC寄存器进行配置,开启TIM3中断 接下来配置PC7 (5) 点击 Devic Configuration Tool Code Generation按钮自动生成代码。 (6) 写好程序以后工程编译 (7) 运行,选择模式 5.5实验代码解析 系统会在stm32mp1xx_it.c程序中自动生成中断服务子程序入口函数 uint32_t x; 在中断服务子程序中调用已经定义过的x,其初值为0,当定时1秒时间到进入中断服务子程序,x的值进行加加,及x的值每加一次,就是1秒。 如果x==5,代表5秒时间到,PC7引脚状态反转,引起LED4状态变化。 5.6实验现象 当定时5秒时间到LED4亮,再过5秒LED4灭,如此循环。 5.7扩展实验 任务1:利用定时器和外部中断完成 当定时5s时间到蜂鸣器响灭(此后一直响灭) 当定时10s时间到LED4-LED5-LED6-LED7流水灯显示(此后一直流水) 当定时15s时间到马达震动(此后马达一直震动) 当KEY6按下,蜂鸣器灭 当KEY5按下LED4-LED5-LED6-LED7流水灯停止显示 当KEY4按下马达停止震动 第五次课实验报告 实验分析: 这个实验需要掌握的什么知识 实验原理: 简单介绍一下实验的步骤 实验核心代码:(代码每一句话需要加注释) 实验结果:(运行结果照片) 第6章 Cortex-M4 氛围灯PWM控制 6.1 实验目的 了解蜂鸣器工作原理学习 TIM 中 PWM 的使用方法,掌握如何利用 STM32MP157A 芯片输出PWM 波控制蜂鸣器 6.2 实验环境 FS-MP1C 开发平台 ST-Link 仿真器 STM32CubeIDE 开发软件 PC 机 XP、Window7/10 (32/64bit) 6.3实验原理 PWM基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。 PWM工作过程: 定时器从0开始向上计数 0-t1段,定时器计数器TIMx_CNT值小于CCRx值,输出低电平 t1-t2段,定时器计数器TIMx_CNT值大于CCRx值,输出高电平 当TIMx_CNT值达到ARR时,定时器溢出,至此一个PWM周期完成。 PWM一般配置步骤: ① 使能相关时钟(定时器和GPIO) ② 初始化GPIO ③ 初始化定时器 ④ 初始化输出比较参数 ⑤ 使能自动重装载的预装载寄存器 ⑥ 使能定时器 ⑦ 不断改变比较值CCRx. 打开开发板原理图对照可以看到开发板中有 1 个蜂鸣器 BUZ1,如下图: 查看芯片手册可知 PC7 可以作为 PWM TIMER3 的通道3使用,本文实现如何通过 PWM 驱动LED灯调节其亮度: 对应管脚 PC7 管脚功能 TIM3_CH2 6.4实验步骤 (1) 打开 STM32CubeIDE->File->New->STM32 Project (2) 可以在左侧搜索框内输入芯片型号 STM32MP157A 进行搜索,选择对应芯片,点击 Next (3) 填写工程名,点击Finish。 (4)然后进入配置页面,进行相关配置。 需要注意一下,和其他单片机不同,还需要继续设置 “ Pin Reservation”给“ Cortex-M4”,否则 STM32CubeMX 不会生生成 GPIO 初始化相关代码。 具体操作:在刚才选择的所有引脚上,鼠标右键选择 “ Pin Reservation”->“ Cortex-M4”。 对PC7进行相应配置,点击Categories分类栏,选择System Core的GPIO,右侧即可对PC7引脚做相应配置。 接下来对TIM3进行相应配置 Clock Source选择Internal Clock,通道选择Channel2的PWM Generation CH2 功能。 (5) 点击 Devic Configuration Tool Code Generation按钮自动生成代码。 (6) 写好程序以后工程编译 (7) 运行,选择模式 6.5实验代码解析 //启动PWM功能 HAL_TIM_PWM_Start(&amp;htim3,TIM_CHANNEL_2); //调节占空比 __HAL_TIM_SET_COMPARE(&amp;htim3,TIM_CHANNEL_2,500); 6.6实验现象 由PC7控制的LED4 将实现亮度的循环调节,给不同的占空比将实现不同的亮度。 6.7扩展实验 任务1:利用定时器的PWM功能实现蜂鸣器声音的调节 任务2:利用定时器PWM实现蜂鸣器演唱歌曲; 注意:AUTORELOAD和COMPARE函数的视野方法 __HAL_TIM_SET_AUTORELOAD(&amp;htim2,value);//自动重装载COUT值 __HAL_TIM_SET_COMPARE(&amp;htim2,TIM_CHANNEL_1,value/2);//调节50%的占空比 第六次课实验报告 实验分析: 这个实验需要掌握的什么知识 实验原理: 简单介绍一下实验的步骤 实验核心代码:(代码每一句话需要加注释) 实验结果:(运行结果照片) 第7章 Cortex-M4 串行通讯接口 7.1 实验目的 熟悉 STM32CubeIDE 工具软件的使用。 掌握 STM32CubeIDE 软件的基本设计流程和设计步骤,能够使用工具进行设计、编程 。 学习 UART 串口的使用方法,掌握如何利用 STM32MP157A 芯片的串口输入输出 7.2 实验环境 ST-Link 仿真器 STM32CubeIDE 开发软件 PC 机 XP、Window7/10 (32/64bit) 串口调试工具 7.3 实验原理 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 Universal Serial Bus 或者 USB 混淆)。大多数计算机包含两个基于 RS232 的串口。串口同时也是仪器仪表设备通用的通信协议;很多 GPIB(通用接口总线)兼容的设备也带有 RS-232口。同时,串口通信协议也以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节 (byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。典型地,串口用于 ASCII 码字符的传输。通信使用 3 根线完成:( )地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。 串口通信最重要的参数是波特率、数据位、停止位和 奇偶校验。对于两个进行通行的端口,这些参数必须匹配: 波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的 bit 的个数。 数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是 8 位的,标准的值是 5、7 和 8 位。如何设置取决于你想传送的信息 停止位:用于表示单个包的最后一位。典型的值为 11.5 和 2 位。这里的1.5 位的数据宽度,就是 1.5 个波特率,由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因 此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用 于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。 硬件流控制: 硬件流控制常用的有 RTS/CTS 流控制和 DTR/ R(数据终端就绪/数据设置就绪)流控制。 STM32 串口设置一般可以总结为如下几个步骤: 1)串口时钟使能,GPIO 时钟使能 2)设置引脚复用映射 3)GPIO 初始化设置,模式为复用功能 4)串口参数初始化:设置波特率,字长,奇偶校验等参数 5)开启中断并初始化 NVIC,使能中断(如果需要开启中断才需要这个步 骤) 6)使能串口 7)编写中断处理函数 串口硬件原理图: 这里选用UART4_RX,UART4TX.HAL 库函数解析: HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); HAL_UART_Receive(UART_ andleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); 这两个函数是轮询方式发送和接收 HAL_UART_Transmit_IT(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size); HAL_UART_Receive_IT(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size); 这两个函数是以中断方式发送和接收 7.4实验步骤 (1) 打开 STM32CubeIDE->File->New->STM32 Project (2) 可以在左侧搜索框内输入芯片型号 STM32MP157A 进行搜索,选择对应芯片,点击 Next (3) 填写工程名,点击Finish。 (4)然后进入配置页面,进行相关配置。 PB2对应UART4_RX,PG11对应UART4_TX. 然后再对UART4进行相应配置 配置Mode选择Asynchronous,即异步模式。 (5) 点击 Devic Configuration Tool Code Generation按钮自动生成代码。 (6) 写好程序以后工程编译 (7) 运行,选择模式 7.5实验代码解析 在主函数里面的while(1)里面 HAL_UART_Transmit(&amp;huart4,"This is a test",1,100); 7.6实验现象 串口调试助手里面会不断输出显示This is a test。 7.7扩展实验 任务1:重写printf函数 注意1:需要重写__io_putchar函数 int __io_putchar(int ch) { HAL_UART_Transmit(&amp;huart4,(uint8_t *)&amp;ch,1,100); return ch; } 注意2:在主程序中就可以使用printf:。 while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ printf("zhoujie***%d\n",x++); } 注意3:在使用printf前需要调用标准#include<stdio.h> 任务2:串口的不定长接收 注意1:在完成串口不定长接收之前需要串口接收准备 //1 使能串口空闲中断 __HAL_UART_ENABLE_IT(&amp;huart4,UART_IT_IDLE); //2.使能串口中断接收数据 HAL_UART_Receive_IT(&amp;huart4,rx_buf,sizeof(rx_buf)); 注意2:// 自定义空闲中断处理函数 void uart4_idle_func(void) { int len = 0; //判定 是否为空闲中断 if( __HAL_UART_GET_FLAG(&amp;huart4, UART_FLAG_IDLE) == SET ) { // 清除空闲中断标志,因为是自己定义的函数 系统不会清标 __HAL_UART_CLEAR_IDLEFLAG(&amp;huart4); // 计算接收数据的长 len = sizeof(rx_buf) - huart4.RxXferCount; //第二个参数是 还剩下的空间 // 打印接收到时数据 数据处理 printf("uart rx len = %d, data: %s\r\n",len, rx_buf); // 准备接收下一次数�? memset(rx_buf,0,len); // 清理接收容器 //重置接收指针 剩余容器大小 huart4.pRxBuffPtr = rx_buf; huart4.RxXferCount = sizeof(rx_buf); } } 任务3: 利用串口的不定长接收完成以下功能: 发送: led4on----led4点亮 led4off led4熄灭 发送: ledallon-----led4、led5、led6、led7点亮 Ledalloff-----led4、led5、led6、led7熄灭 发送: Ledliushuion----led4、led5、led6、led7流水灯闪烁 Ledliushuioff----led4、led5、led6、led7流水灯停止 发送: beepon----蜂鸣器尖锐的响灭(pwm) beepoff----蜂鸣器停止 发送: Time10-----10秒以后 led4、led5、led6、led7点亮 Time15----15秒以后蜂鸣器尖锐的响灭(pwm) 第七次课实验报告 实验分析: 这个实验需要掌握的什么知识 实验原理: 简单介绍一下实验的步骤 实验核心代码:(代码每一句话需要加注释) 实验结果:(运行结果照片) 第8章Cortex-M4 数码管控制 8.1 实验目的 熟悉 STM32CubeIDE 工具软件的使用。 掌握 STM32CubeIDE 软件的基本设计流程和设计步骤,能够使用工具进行设计、编程、 。 学习数码管的使用方法,掌握如何利用 STM32MP157A 芯片的数码管的读写操作。 8.2 实验环境 ST-Link 仿真器 STM32CubeIDE 开发软件 PC 机 XP、Window7/10 (32/64bit) 串口调试工具 8.3 实验原理 (1) I2C概述: I2C 总线支持任何 IC 生产过程NMOSCMOS双极性两线 ―― 串行数据SDA和串行时钟 SCL线在连接到总线的器件间传递信息每个器件都有一个唯一的地址识别无论是微控制器LCD 驱动器存储器或键盘接口而且都可以作为一个发送器或接收器由器件的功能决定很明显LCD 驱动器只是一个接收器而存储器则既可以接收又可以发送数据 除了发送器和接收器外器件在执行数 据传输时也可以被看作是主机或从机,主机是初始化总线的数据传输并产生允许传输的时钟信号 的器件此时任何被寻址的器件都被认为是从机 术语 描述 发送器 发送数据到总线的器件 接收器 从总线接收数据的器件 主机 初始化发送产生时钟信号和终止发送的器件 从机 被主机寻址的器件 多主机 同时有多于一个主机尝试控制总线但不破坏报文 仲裁 是一个在有多个主机同时尝试控制总线 但只允许其中一个控制总线并使报文不被破坏的过程 同步 两个或多个器件同步时钟信号的过程 I2C 总线是一个多主机的总线这就是说可以连接多于一个能控制总线的器件到总线由于主机通常是 微控制器让我们考虑以下数据在两个连接到 I2C 总线的微控制器之间传输的情况 这突出了 I2C 总线的主机 从机和接收器 发送器的关系应当注意的是这些关系不是持久的只 由当时数据传输的方向决定传输数据的过程如下 1假设微控制器 A 要发送信息到微控制器 B • 微控制器 A主机寻址微控制器 B从机 • 微控制器 A主机 发送器发送数据到微控制器 B从机 接收器 • 微控制器 A 终止传输 2 如果微控制器 A 想从微控制器 B 接收信息 • 微控制器 A主机寻址微控制器 B从机 • 微控制器 A主机 接收器从微控制器 B从机 发送器接收数据 • 微控制器 A 终止传输 (2)I2C起始和停止条件 在 I2C 总线中 唯一出现的是被定义为起始S和停止P条件的情况其中一种情况是在 SCL 线是高电平时SDA 线从高电平向低电平切换这个情况表示起始条件当 SCL 是高电平时SDA 线由低电平向高电平切换表示停止条件,起始和停止条件一般由主机产生 (3)传输数据 字节格式:发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制 每个字节后必须跟 一个响应位 首先传输的是数据的最高位 MSB ,如果从机要完成一些其他功能后 例如一个 内部中断服务程序 才能接收或发送下一个完整的数据字节 可以使时钟线 SCL 保持低电平迫使主机进入 等待状态 当从机准备好接收下一个数据字节并释放时钟线 SCL 后 数据传输继续 在一些情况下 可以用与 I2C 总线格式不一样的格式 例如兼容 CBUS 的器件 甚至在传输一个字 节时 用这样的地址起始的报文可以通过产生停止条件来终止 此时不会产生响应 响应:数据传输必须带响应相关的响应时钟脉冲由主机产生在响应的时钟脉冲期间发送器释放 SDA 线 高在响应的时钟脉冲期间接收器必须将 SDA 线拉低使它在这个时钟脉冲的高电平期间保持稳定的低 电平,当然必须考虑建立和保持时间,通常被寻址的接收器在接收到的每个字节后除了用 CBUS 地址开头的报文必须产生一个响应,当从机不能响应从机地址时例如它正在执行一些实时函数不能接收或发送从机必须使数据线保持 高电平主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输如果从机 接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节主机必须再一次 终止传输这个情况用从机在第一个字节后没有产生响应来表示从机使数据线保持高电平主机产生一 个停止或重复起始条件,如果传输中有主机接收器它必须通过在从机不产生时钟的最后一个字节不产生一个响应 向从机 发送器通知数据结束从机 发送器必须释放数据线允许主机产生一个停止或重复起始条件 (4)I2C控制数码管 I2C1_SDA对应PF14,I2C1_SCL对应PF15,ZLG7290从设备地址0. 带mem的读写函数。 HAL_I2C_Mem_Write (I2C_HandleTypeDef * hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t * pData, uint16_t Size, uint32_t Timeout) HAL_I2C_Mem_Read (I2C_HandleTypeDef * hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t * pData, uint16_t Size, uint32_t Timeout) ZLG7290功能框图 8.4实验步骤 (1) 打开 STM32CubeIDE->File->New->STM32 Project (2) 可以在左侧搜索框内输入芯片型号 STM32MP157A 进行搜索,选择对应芯片,点击 Next (3) 填写工程名,点击Finish。 (4)然后进入配置页面,进行相关配置。 配置PF14,PF15为I2C1_SDA和I2C1_SCL功能 在Categories里面选择I2C1 M4工作模式,I2CMode里面选择I2C功能。 同时完成定时器2的定时1秒的相关配置。 (5) 点击 Devic Configuration Tool Code Generation按钮自动生成代码。 (6) 写好程序以后工程编译 (7) 运行,选择模式 8.5实验代码解析 HAL_TIM_Base_Start_IT(&amp;htim2);//手动启动定时器 HAL_I2C_Mem_Write(&amp;hi2c1,0x70,addr1+pos, 1, &amp;buf[pos], 1, 100); 往数码管的内部存储器的6个数码管的地址里面填入具体的值。 将实时的时分秒数据存入Buf数组。 (5) 点击 Devic Configuration Tool Code Generation按钮自动生成代码。 (6) 写好程序以后工程编译 (7) 运行,选择模式 8.6实验现象 6个数码管将显示时分秒,并且能动态的运行。 8.7扩展实验 任务1:做一个时分秒的数字时钟。按下KEY3,可以调节时,按下KEY4可以调节分,按下KEY5全部清空。 任务2:定时器做一个秒表。 任务3:当按下KEY3奇数次的时候秒表归零并启动。当按下偶数次的时候秒表停止,并将此时的秒表的数据用串口打印出来。 第八次课实验报告 实验分析: 这个实验需要掌握的什么知识 实验原理: 简单介绍一下实验的步骤 实验核心代码:(代码每一句话需要加注释) 实验结果:(运行结果照片) 用上面知识stm32CubeIDE嵌入式项目手表
最新发布
05-25
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值