打印
[AT32F407]

【AT-START-F407测评】+USART

[复制链接]
603|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1.板子收到有几天了,一直没有没时间看,今天周末,先来发一个评测,不多说上图:

AT32F407系列使用高性能的ARM®Cortex®-M4F 32位的RISC内核,工作频率为240 MHz,Cortex®-M4F内核带有单精度浮运算单元(FPU),支持所有ARM®单精度数据处理指令和数据类型。它还具有一组DSP指令和提高应用安全性的一个存储器保护单元(MPU)。AT32F407系列内置高速存储器(高达1024 K字节的内存和96+128 K字节的SRAM),并可使用外部存储器(高达16 M字节的SPI闪存),丰富的增强I/O端口和联接到两条APB总线的外设。 内置存储器可设置任意范围程序区受sLib保护,成为执行代码安全库区。器件包含3个12位的ADC、 2个12位的DAC、 8个通用16位定时器、 2个通用32位定时器和多达2个PWM定时器,还包含标准和先进的通信接口:多达3个I2C接口、4个SPI接口(复用为I2S接口)、2个SDIO接口、8个USART/UART接口、1个USB接口、2个CAN接口、和1个以太网MAC接口。AT32F407系列工作于-40 °C至+105 ° C的温度范围,供电电压2.6 V至3.6 V,省电模式保证低功耗应用的要求。 不得不说AT32F407的资源相当的丰富。

2.拿到板子,第一件事就是应该找资料了,AT32F407的资料分为在两个地方可以找到。第一个就官网:http://www.arterytek.com/cn/product/AT32F407.jsp?t=1608257958336。第二地方就是12论坛的雅特力的版块:百度云:https://pan.baidu.com/s/1BQQz91QhJcyPF-mLMIsPJw   password: t3io   Github:https://github.com/Artery-MCU/Artery-AT32-MCU-Pack.git
官网上的资料是特别全,没有厂家提供的DEMO程序,百度云盘里的资料比较全,开发所需要的资料全部都有。
3.资料下载完以后,就可以进行开发了,AT32F407开发板,自带AT -Link-EZ 调试工具,这样就不用我们额外用仿真工具了,这里不得不说,厂家真的良心呀。在开发之前,我们还需要安装AT -Link-EZ 的驱动程序和AT32F407的支持包。这些资料在我们下载下来的资料里都有,而且有入门指南,非常详细,我就不过多废话了。

4.一切准备好了,可以烧录程序开始跑起来了,我用的厂家提供的DEMO程序中的USART来测试,主要是用USART2和USART3,用DMA来传输,USART2TX把数据发送到USART3的RX,USART3TX再把数据发送到USART2的RX,在通过对比USART2TX发送的数据和USART3RX接收到数据,以及USART3TX发送的数据和USART2RX接收到数据是否都相等,相等就把LED2,3,4点亮,硬件上需要把USART3TX和USART2RX,USART2TX和USART3的RX连接起来,实验效果:
主程序:
int main(void)
{

  /* System Clocks Configuration */
  RCC_Configuration();

  /* NVIC configuration */
  NVIC_Configuration();

  /* Configure the GPIO ports */
  GPIO_Configuration();//初始化IO口,设置USART2和USART3管脚部分映射

  /* Initialize Leds mounted on board */
  AT32_Board_Init();

  /* Configure the DMA */
  DMA_Configuration();//DMA参数设置

  /* USART2 and USART3 configuration -------------------------------------------*/
  /* USART2 and USART3 configured as follow:
        - BaudRate = 230400 baud  
        - Word Length = 8 Bits
        - One Stop Bit
        - No parity
        - Hardware flow control disabled (RTS and CTS signals)
        - Receive and transmit enabled
  */
  USART_StructInit(&USART_InitStructure);
  USART_InitStructure.USART_BaudRate = 230400;//USART设置,波特率为230400
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  /* Configure USART2 */
  USART_Init(USART2, &USART_InitStructure);

  /* Configure USART3 */
  USART_Init(USART3, &USART_InitStructure);

  /* Enable USART2 DMA TX request */
  USART_DMACmd(USART2, USART_DMAReq_Tx, ENABLE);

  /* Enable USART3 DMA TX request */
  USART_DMACmd(USART3, USART_DMAReq_Tx, ENABLE);

  /* Enable the USART3 Receive Interrupt */
  USART_INTConfig(USART3, USART_INT_RDNE, ENABLE);

  /* Enable USART2 */
  USART_Cmd(USART2, ENABLE);

  /* Enable USART3 */
  USART_Cmd(USART3, ENABLE);

  /* Enable USART2 DMA TX Channel */
  DMA_ChannelEnable(DMA1_Channel7, ENABLE);//

  /* Enable USART3 DMA TX Channel */
DMA_ChannelEnable(DMA1_Channel2, ENABLE);

  /* Receive the TxBuffer2 */
  while(__index < TxBufferSize2)
  {
     while(USART_GetFlagStatus(USART2, USART_FLAG_RDNE) == RESET)
     {
     }
     RxBuffer1[__index++] = USART_ReceiveData(USART2);  
  }

  /* Wait until USART2 TX DMA1 Channel  Transfer Complete */
  while (DMA_GetFlagStatus(DMA1_FLAG_TC7) == RESET)
  {
  }
  /* Wait until USART3 TX DMA1 Channel Transfer Complete */
  while (DMA_GetFlagStatus(DMA1_FLAG_TC2) == RESET)
  {
  }

  /* Check the received data with the send ones */
  TransferStatus1 = Buffercmp(TxBuffer2, RxBuffer1, TxBufferSize2);
  /* TransferStatus1 = PASSED, if the data transmitted from USART3 and  
     received by USART2 are the same */
  /* TransferStatus1 = FAILED, if the data transmitted from USART3 and
     received by USART2 are different */
  TransferStatus2 = Buffercmp(TxBuffer1, RxBuffer2, TxBufferSize1);
  /* TransferStatus2 = PASSED, if the data transmitted from USART2 and  
     received by USART3 are the same */
  /* TransferStatus2 = FAILED, if the data transmitted from USART2 and
     received by USART3 are different */

  /* Judge whether the result is correct */
  if((TransferStatus1 == PASSED)&&(TransferStatus2 == PASSED))
  {
    /*Trun on the LED*/
    AT32_LEDn_ON(LED2);
    AT32_LEDn_ON(LED3);
    AT32_LEDn_ON(LED4);
  }
  while (1)
  {
  }
}




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

106

帖子

0

粉丝