AT32F425C8T7 开发笔记

0x00 AT32F425C8T7 引脚矩阵映射关系

详情可见AT32手册

AT32的矩阵映射其实也就是开启端口的复用功能,但是它的功能更丰富。

AT32的引脚初始化函数:

  gpio_init_struct.gpio_mode = GPIO_MODE_MUX;/*复用模式*/
  gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PUT_PUSH_PULL;/*输出模式*/
  gpio_init_struct.gpio_pins = GPIO_PINS_1;/*引脚号*/
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;/*有无上下拉电阻*/
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;/*驱动能力*/

  gpio_init(GPIOA, &gpio_init_struct);/*初始化引脚*/
  gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE1, GPIO_MUX_1);/*选择复用功能*/

在这里插入图片描述
在这里插入图片描述

0x01 AT32_Work_Bench 图形化配置指南

AT32_Work_Bench 使用指南

图形化配置工具 AT32_Work_Bench 下载

相关使用介绍

0x02 AT32串口打印函数

使用图形化工具配好引脚就可以开始使用,很简单,不需要自己去配置,并且没有标准库和hal库之说,配出来就是直接能用的函数。

void AT32_LOG(usart_type* USARTx, uint8_t *Data)
{
    while(*Data!='\0')
    { 
        while(usart_flag_get(USARTx, USART_TDBE_FLAG) == RESET);
            usart_data_transmit(USARTx, *Data);
        while(usart_flag_get(USARTx, USART_TDC_FLAG) == RESET);
            Data++;
    }
}

0x03 AT32 串口中断函数

串口在初始化以后,还需要添加中断函数和使能中断。

中断函数已经被存储在 at32f425_int.c中,需要在这个文件中添加自己的内容

还需要在串口初始化函数中添加以下内容开启中断:

usart_interrupt_enable(USART2, USART_IDLE_INT, TRUE);
usart_interrupt_enable(USART2, USART_RDBF_INT, TRUE);
void USART1_IRQHandler(void)
{
  if  (usart_flag_get(USART1, USART_IDLEF_FLAG))
  {

    usart_flag_clear(USART1,USART_IDLEF_FLAG);
  }

  if  (usart_flag_get(USART1, USART_IDLEF_FLAG))
  {

  }
}

0x04 AT32 延时函数

#include "at32f425_board.h"
#define STEP_DELAY_MS                    50

static __IO uint32_t fac;
static __IO uint32_t fac_ms;

void at32_board_init()
{
  delay_init();

}

void delay_init()
{
  systick_clock_source_config(SYSTICK_CLOCK_SOURCE_AHBCLK_NODIV);
  fac_us = system_core_clock / (1000000U);
  fac_ms = fac_us * (1000U);
}

void delay_us(uint32_t nus)
{
  uint32_t temp = 0;
  SysTick->LOAD = (uint32_t)(nus * fac_us);
  SysTick->VAL = 0x00;
  SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
  SysTick->VAL = 0x00;
}

void delay_ms(uint16_t nms)
{
  uint32_t temp = 0;
  while(nms)
  {
    if(nms > STEP_DELAY_MS)
    {
      SysTick->LOAD = (uint32_t)(STEP_DELAY_MS * fac_ms);
      nms -= STEP_DELAY_MS;
    }
    else
    {
      SysTick->LOAD = (uint32_t)(nms * fac_ms);
      nms = 0;
    }
    SysTick->VAL = 0x00;
    SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
    do
    {
      temp = SysTick->CTRL;
    }while((temp & 0x01) && !(temp & (1 << 16));

    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
    SysTick->VAL = 0x00;
  }
}

void delay_sec(uint16_t sec)
{
  uint16_t index;
  for(index = 0; index < sec; index++)
  {
    delay_ms(500);
    delay_ms(500);
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IoT_H2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值