[AT32F407] 【AT-START-F407测评】+串口配置方法

[复制链接]
 楼主| gaoyang9992006 发表于 2021-1-28 16:25 | 显示全部楼层 |阅读模式
https://bbs.21ic.com/icview-3068392-1-1.html
书接上回,上回咱们从0开始建立个新工程,并完成了点灯操作。
接下来咱们在原有基础上怎么串口打印功能。
79718601272fdba432.png
由原理图可知,串口在PA10和PA9上,我们如果要打印消息到串口,则要使用PA9,记住了USART1.
接下来配置端口的顺序是使能端口时钟,使能USART1时钟,配置端口IO模式,调用外设标准函数配置串口参数。。。
  1. //串口初始化,根据原理图使用的是USART1,PA9为TX,PA10为RX
  2. void UART1_Init(uint32_t bound)
  3. {
  4.   GPIO_InitType GPIO_InitStructure;
  5.   USART_InitType USART_InitStructure;
  6.        
  7.         RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOA,ENABLE);
  8.         RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_USART1,ENABLE);
  9.   /* Configure the UART1 TX pin */
  10.   GPIO_StructInit(&GPIO_InitStructure);
  11.   GPIO_InitStructure.GPIO_Pins = GPIO_Pins_9;
  12.   GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  14.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  15.        
  16.           /*Configure UART param*/
  17.   USART_StructInit(&USART_InitStructure);
  18.   USART_InitStructure.USART_BaudRate = bound;
  19.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  20.   USART_InitStructure.USART_StopBits = USART_StopBits_1;
  21.   USART_InitStructure.USART_Parity = USART_Parity_No;
  22.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  23.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;       

  24.   USART_Init(USART1, &USART_InitStructure);
  25.   USART_INTConfig(USART1, USART_INT_RDNE, ENABLE);
  26.   USART_Cmd(USART1, ENABLE);  
  27. }
配置好后,就可以使用了,发送数据时候调用发送函数
  1.   USART_SendData(USART1,'A');
全部main.c源码如下
  1. #include "at32f4xx_gpio.h"

  2. /*delay variable*/
  3. static __IO uint32_t fac_us;
  4. static __IO uint32_t fac_ms;
  5. /*delay macros*/
  6. #define STEP_DELAY_MS        50
  7. void Delay_init()
  8. {
  9.   /*Config Systick*/
  10.   SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
  11.   fac_us = SystemCoreClock / (1000000U);
  12.   fac_ms = fac_us * (1000U);
  13. }

  14. void Delay_ms(u16 nms)
  15. {
  16.   u32 temp;
  17.   while(nms)
  18.   {
  19.     if(nms > STEP_DELAY_MS)
  20.     {
  21.       SysTick->LOAD = (u32)(STEP_DELAY_MS * fac_ms);
  22.       nms -= STEP_DELAY_MS;
  23.     }
  24.     else
  25.     {
  26.       SysTick->LOAD = (u32)(nms * fac_ms);
  27.       nms = 0;
  28.     }
  29.     SysTick->VAL = 0x00;
  30.     SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
  31.     do
  32.     {
  33.       temp = SysTick->CTRL;
  34.     }while( (temp & 0x01) && !(temp & (1<<16)) );

  35.     SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
  36.     SysTick->VAL = 0X00;
  37.   }
  38. }
  39. //串口初始化,根据原理图使用的是USART1,PA9为TX,PA10为RX
  40. void UART1_Init(uint32_t bound)
  41. {
  42.   GPIO_InitType GPIO_InitStructure;
  43.   USART_InitType USART_InitStructure;
  44.        
  45.         RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOA,ENABLE);
  46.         RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_USART1,ENABLE);
  47.   /* Configure the UART1 TX pin */
  48.   GPIO_StructInit(&GPIO_InitStructure);
  49.   GPIO_InitStructure.GPIO_Pins = GPIO_Pins_9;
  50.   GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
  51.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  52.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  53.        
  54.           /*Configure UART param*/
  55.   USART_StructInit(&USART_InitStructure);
  56.   USART_InitStructure.USART_BaudRate = bound;
  57.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  58.   USART_InitStructure.USART_StopBits = USART_StopBits_1;
  59.   USART_InitStructure.USART_Parity = USART_Parity_No;
  60.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  61.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;       

  62.   USART_Init(USART1, &USART_InitStructure);
  63.   USART_INTConfig(USART1, USART_INT_RDNE, ENABLE);
  64.   USART_Cmd(USART1, ENABLE);  
  65. }

  66. int main(void)
  67. {
  68. //LED2管脚初始化
  69.         GPIO_InitType GPIO_InitStructure;
  70.         RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOD, ENABLE);
  71.         GPIO_StructInit(&GPIO_InitStructure);
  72.         GPIO_InitStructure.GPIO_Pins =GPIO_Pins_13;
  73.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
  74.         GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;       
  75.         GPIO_Init(GPIOD,&GPIO_InitStructure);
  76.        
  77.         Delay_init();
  78.         UART1_Init(115200);
  79.        
  80.         while(1)
  81.         {
  82.                 GPIO_SetBits(GPIOD,GPIO_Pins_13);
  83.                 Delay_ms(200);
  84.                 GPIO_ResetBits(GPIOD,GPIO_Pins_13);               
  85.                 Delay_ms(200);
  86.                 USART_SendData(USART1,'A');
  87.         }
  88.        
  89. }
编译后0错误0警告,下载后,复位,开始闪烁并可用串口助手接收到字符
25603601274f8667cc.png
七毛钱 发表于 2021-1-28 16:30 | 显示全部楼层
感谢分享,串口打印功能调通了,可以开始搞复杂项目 了
zhengfish 发表于 2021-1-29 07:58 来自手机 | 显示全部楼层
你这可以编教材了
 楼主| gaoyang9992006 发表于 2021-1-29 09:02 | 显示全部楼层
zhengfish 发表于 2021-1-29 07:58
你这可以编教材了

哈哈,我这是巩固一下基础,基础牢固才行,发现ARM系列的大同小异都要配置这些顺序,只不过每一家的可能库函数名字不同而已。
小明的同学 发表于 2021-3-1 19:13 | 显示全部楼层
给力啊,很详细。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2045

主题

16351

帖子

222

粉丝
快速回复 返回顶部 返回列表