【NXP S32K144 】 调用 FlexIO 模块与 PWM 模块输出波形

一、 S32K144 FlexIO 介绍

1. FlexIO 模块简介

S32K144 的 FlexIO 模块参数配置如下:

FlexIO是一个高度可配置的模块,提供广泛的功能,包括:模拟各种串行通信协议,灵活的16位计时器,支持各种触发、重置、启用和禁用。

2. FlexIO 模块特性

FlexIO模块能够支持广泛的协议,包括但不限于:

  • UART
  • I2C
  • SPI
  • I2S
  • PWM/波形生成

提供了以下关键功能:

  • 32位移位寄存器阵列与传输、接收和数据匹配模式
  • 双缓冲移位操作连续数据传输移位连接,以支持大传输大小自动启动/停止位生成
  • 中断,DMA或轮询传输/接收操作
  • 可编程波特率独立于总线时钟频率,支持在停止模式期间使用
  • 高度灵活的16位计时器,支持各种内部或外部触发,重置,启用和禁用条件

3. FlexIO 操作模式

FlexIO模块支持下表中描述的芯片模式。

4. FlexIO 信号描述

5. FlexIO 内存映射与数据结构

本节描述 FlexIO 模块中的寄存器和数据结构。模块的基址取决于芯片的特定内存映射。

二、 S32DS FlexIO 例程及寄存器介绍

1. 例程简介

  • FlexIO介绍

FlexIO是一个高度可配置的模块,提供了广泛的功能。

此示例配置两个计时器和一个引脚以模拟:

  • 100KHz处的PWM信号,占空比作为Init功能参数。

  • UART8位传输在19200b/s(轮询技术)。

  • FlexIO框图

下图提供了FlexIO计时器和换挡器配置的概述。

三、 寄存器介绍

1. FLEXIO_UART_transmit_char(char send)

可以使用一个定时器、一个换挡器和一个针(如果支持CTS)来支持UART传输。启动和停止位插入将自动处理,并且可以使用DMA控制器支持多个传输。计时器状态标志可用于指示每个字的停止位。中断字符和空闲字符需要软件干预,在传输中断或空闲字符之前,应更改SSTART和SSTOP字段以传输所需的状态,并且要传输的数据必须等于0xFF或0x00。

支持第二停止位需要使用软件将该停止位插入到数据流中(并增加要传输的比特数)。注意,当执行字节写入SHIFFBUFn(或shiftbufbis首先传输MSB)时,寄存器的其余部分保持不变,允许地址标记位或额外的停止位保持不受干扰。

FlexIO不支持自动插入奇偶校验位。

 

2. PORT_init (void)

FlexIO模块有如下三个输出通道接口。

 


以PTD0通道为例,找到开发板上对应的引脚。

 3. FLEXIO_100KHz_PWM_init()

PWM(pulse width modulation)脉冲宽度调制是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。

这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

在S32K144 FlexIO模块中,可以通过修改其参数以达到修改输出波形占空比与频率的目的:

  • (1) 修改占空比

修改FLEXIO_100KHz_PWM_init()中数值即可,数值代表占空比,数值范围为(0,100)

 

  • (2) 修改频率

由以下公式可知,欲修改频率,

 

只需修该箭头划线处参数即可。

其中,8000 000 代表时钟频率,1000 000代表输出波形频率。

数值范围为(15.625kHz,2048kHz),在效果示意中会尝试输出不同波形。

 

四、 效果示意



  • 1. 打开S32 Design Studio,点击:“File”->“New”->“S32DS Project from Example”。



  • 2.在弹出的窗口选取 S32K144 目录下的 FlexIO 例程,点击“Finish”。



  • 3. 按照如图所示连接电路,点击软件左上角“Build”按钮,选取“Debug”方式编译例程。可以在示波器上观察到波形。



  • 4.调节FLEXIO_100KHz_PWM_init() 参数,使得输出波形占空比为25% 频率1000kHz 示波器探头500MHz 。

 

  • 5.占空比25% 频率1000kHz 示波器探头200MHz。

 

 

  • 6.占空比25% 频率100kHz 示波器探头200MHz。

 

 

  • 7.占空比50% 频率200kHz 示波器探头200MHz。

 

 

  • 8.占空比50% 频率300kHz(过高) 示波器探头200MHz。

 

 

  • 9.占空比50% 频率10kHz (过低)示波器探头200MHz。

 


五、总结

本程序设计思路如下:

  • 禁止看门狗

  • 系统时钟:初始化系统晶振(SOSC)为 8MHz,系统时钟为 80MHz,运行模式(RUN mode)为 80MHz

  • 初始化 FlexIO 0:

-使能模块时钟

-选择 OSC 作为时钟源

-配置比特率 500KHz 发送/接收

-无效化所有报文缓冲区

-设置进入标志和全局标志位来检测所有接受信息的 ID 位

-配置报文缓冲区4为接收器,ID 0x556,标准 ID

-否定32个报文缓冲区的模块挂起状态

  • 初始化端口引脚:

-使能 PORT E 时钟

-PTD0,PTD1,PTE15:配置为 FXIO_D0,FXIO_D1,FXIO_D2

  • 初始化计时器0,移位器0以进行模拟一个UART变送器实例,使用:

-FXIO_D2生成波特率(输出禁用)。

-FXIO_D1作为输出开关引脚。

  • 初始化计时器1和FXIO_D0来模拟PWM。

  • 发送示例:发送“使用FlexIO模块模拟UART……”

  • 循环永久等待


六、参考文献

 1. S32K144EVB-SCH

 2. S32K144RM_Reference

技术文档

类型标题档案
硬件Schematics
硬件Reference Manual

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论