S32K144从入门到入土(3)GPIO操作

1 引脚配置

 点击1进入配置界面。

 点击便可进入如图画面。

 将输出引脚配置为如图所示模式(选择自己的LED灯输出引脚)。根据电路原理图,选择引脚的初始化模式。笔者的原理图如图:

 故初始化时,选择引脚电平为高,模式选择上拉。

配置如图所示 

配置输入引脚

 

同理选择自己电路板上的按键链接引脚,根据电平极性,配置正确的工作模式即可。 

 在配置时,需要几个注意点,1是中断标志位。可以配置自动清空中断标志(之前看过一篇博客,说配置之后也不会自动清空,笔者尚未测试过)。2是中断方式,可以选择外部中断,DMA中断设置各种触发极性。3是引脚复用。引脚复用的作用在于在有限的引脚资源上实现多样化的功能,从而提高芯片的灵活性和功能性。

这里笔者采用扫描和外部中断两种方式实现按键控制LED。

方式一:

采用扫描的方法。

在主函数中初始化时钟,延时函数,引脚。

在while中对输入 引脚进行读取。当读取到上升沿时翻转输出脚电压。

这种方式较为简单,故笔者不在这里赘述。

方式二:

通过中断方式进行实现。

    CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,
                   g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
    CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
    PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);
    s32_systick_init();

初始化时钟引脚,INT_SYS_InstallHandler()注册中断

INT_SYS_EnableIRQ使能中断

编写中断服务函数

在中断服务函数中清空状态标志位。

PINS_DRV_ClearPinIntFlagCmd();

OK,整个程序就完成啦,加油,向下一个程序前进。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!要读取W25Q16芯片中的数据,您需要使用S32K144微控制器的SPI(串行外设接口)来与芯片进行通信。以下是一个简单的示例代码,您可以根据您的具体需求进行修改和扩展: ```c // 包含SPI驱动文件和其他必要的头文件 #include "fsl_spi.h" #include "fsl_gpio.h" // 定义SPI主设备和引脚 #define EXAMPLE_SPI_MASTER SPI0 #define EXAMPLE_SPI_MASTER_IRQ SPI0_IRQn #define EXAMPLE_SPI_MASTER_IRQHandler SPI0_IRQHandler #define EXAMPLE_SPI_MASTER_CLK_SRC kCLOCK_BusClk #define EXAMPLE_SPI_MASTER_CLK_FREQ CLOCK_GetFreq(kCLOCK_BusClk) #define EXAMPLE_SPI_MASTER_PCS_FOR_INIT kSPI_Pcs0 #define EXAMPLE_SPI_MASTER_PCS_FOR_TRANSFER kSPI_MasterPcs0 #define EXAMPLE_SPI_MASTER_SSEL_GPIO GPIOB #define EXAMPLE_SPI_MASTER_SSEL_PIN 10U // 定义W25Q16芯片的指令 #define W25Q16_CMD_READ 0x03 // 初始化SPI主设备 void SPI_Init(void) { // 初始化SPI主设备的引脚 gpio_pin_config_t gpio_config = { .pinDirection = kGPIO_DigitalOutput, .outputLogic = 1U, }; GPIO_PinInit(EXAMPLE_SPI_MASTER_SSEL_GPIO, EXAMPLE_SPI_MASTER_SSEL_PIN, &gpio_config); // 配置SPI主设备的时钟和模式 spi_master_config_t masterConfig; SPI_MasterGetDefaultConfig(&masterConfig); masterConfig.baudRate_Bps = 500000; // 设置SPI时钟速度 masterConfig.sselNum = kSPI_Ssel0Assert; SPI_MasterInit(EXAMPLE_SPI_MASTER, &masterConfig, EXAMPLE_SPI_MASTER_CLK_FREQ); } // 读取W25Q16芯片中的数据 void W25Q16_ReadData(uint32_t addr, uint8_t *data, uint32_t length) { // 选择W25Q16芯片 GPIO_ClearPinsOutput(EXAMPLE_SPI_MASTER_SSEL_GPIO, 1U << EXAMPLE_SPI_MASTER_SSEL_PIN); // 发送读取指令和地址 uint8_t cmd[4] = { W25Q16_CMD_READ, (addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF }; SPI_SendBlocking(EXAMPLE_SPI_MASTER, cmd, sizeof(cmd), kSPI_FrameAssert); // 接收数据 SPI_ReceiveBlocking(EXAMPLE_SPI_MASTER, data, length, kSPI_FrameAssert); // 取消选择W25Q16芯片 GPIO_SetPinsOutput(EXAMPLE_SPI_MASTER_SSEL_GPIO, 1U << EXAMPLE_SPI_MASTER_SSEL_PIN); } int main(void) { uint8_t data[256]; // 用于存储读取的数据 // 初始化SPI主设备 SPI_Init(); // 读取W25Q16芯片中的数据 W25Q16_ReadData(0x00000000, data, sizeof(data)); // 在此处处理读取到的数据 while (1) { } } ``` 请注意,上述示例代码仅供参考,并且可能需要根据您的具体硬件和软件配置进行调整。您还需要确保正确连接S32K144和W25Q16芯片,并正确配置SPI引脚和时钟等参数。另外,您还可以根据W25Q16的数据手册来了解更多关于读取数据的详细信息。希望对您有帮助!如果您对代码有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值