目录
- 0x00 AT32F425C8T7 引脚矩阵映射关系
- 0x01 AT32_Work_Bench 图形化配置指南
- 0x02 AT32串口打印函数
- 0x03 AT32 串口中断函数
- 0x04 AT32 延时函数
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 50static __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);}
}