AT32F403A系列单片机开发
记录AT32开发中遇到的问题; 硬件部分: 硬件部分我是参考官方开发板来做的; 经过测试,硬件部分没有任何问题; 原理图 PCB仿真图 实物图 显示效果 有几个值得关注的地方,我将在下面列出: 使用编码器开关作为输入设备; 使用CH340E芯片作为串口转USB; 通过TYPE-C接口的正反插实现不同的功能(连接CH340E芯片和AT32的USB引脚): 屏幕接口采用的是FPC0.5mm接口,方便安装; 硬件部分的测试很快就结束了,主要就是测试各个外设是否能正常使用; 经测试,主控芯片、屏幕、spiflash、USB接口、CH340E、编码器开关、RTC时钟均能正常使用; 软件开发: 参考资料: 主控芯片使用的是雅特力的AT32F403ACGU7,其特性如下所示: 参考资料网站:https://www.arterytek.com/cn/product/AT32F403A.jsp 下载固件库源码,经解压后,可以在目录: .\AT32F403A_407_Firmware_Library_V2.1.2\project\at_start_f403a\examples 找到各个外设的例子: $ ls acc/ crm/ gpio/ spi/ wwdt/ adc/ dac/ i2c/ sram/ xmc/ bpr/ debug/ i2s/ tmr/ can/ dma/ pwc/ usart/ cortex_m4/ exint/ rtc/ usb_device/ crc/ flash/ sdio/ wdt/ 首先当然是串口打印和点灯,这样能测试时钟配置是否正常,以及判断芯片好坏与否; 具体开发: 关键代码如下: 点灯: void at32_led_init(void) { gpio_init_type gpio_init_struct; /* enable the led clock */ crm_periph_clock_enable(USER_LED_GPIO_CRM_CLK, TRUE); /* set default parameter */ gpio_default_para_init(&gpio_init_struct); /* configure the led gpio */ gpio_init_struct.gpio_pins = USER_LED_PIN; gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT; gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; gpio_init_struct.gpio_pull = GPIO_PULL_NONE; gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; gpio_init(USER_LED_GPIO, &gpio_init_struct); } void at32_led_on(void) { USER_LED_GPIO->clr = USER_LED_PIN; } void at32_led_off(void) { USER_LED_GPIO->scr = USER_LED_PIN; } void at32_led_toggle(void) { USER_LED_GPIO->odt ^= USER_LED_PIN; } 串口: void uart_print_init(uint32_t baudrate) { gpio_init_type gpio_init_struct; /* enable the uart and gpio clock */ crm_periph_clock_enable(PRINT_UART_CRM_CLK, TRUE); crm_periph_clock_enable(PRINT_UART_TX_GPIO_CRM_CLK, TRUE); gpio_default_para_init(&gpio_init_struct); /* configure the uart tx pin */ gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; gpio_init_struct.gpio_mode = GPIO_MODE_MUX; gpio_init_struct.gpio_pins = PRINT_UART_TX_PIN; gpio_init_struct.gpio_pull = GPIO_PULL_NONE; gpio_init(PRINT_UART_TX_GPIO, &gpio_init_struct); /* configure uart param */ usart_init(PRINT_UART, baudrate, USART_DATA_8BITS, USART_STOP_1_BIT); usart_transmitter_enable(PRINT_UART, TRUE); usart_enable(PRINT_UART, TRUE); } 串口重定向: ...