打印
[活动专区]

【AT-START-F437-测评】-03-串口定时器测试

[复制链接]
1660|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天周六,来公司加班,顺便测试一下现在的这个AT32F437,今天主要是看串口和定时器,因为这两个外设做好了之后就可以移植CoreMARK了,所以这里先把这两个外设搞定,
根据官方的例程做修改,目前还是很容易把这个搞定的,但是在定时器的时候需要注意一点,定时器是倍频了2倍的,相当于APB2最多到144MHz,但是Timer最多到288M,和主频一样高了,这样的话可以提高定时器的精度,这里提醒一下大家,大家有空的话可以研究一下那个定时器的配置问题。具体的参考AT32f437F437的参考手册的CRM章节,里面有详细的介绍。

CRM时钟配置框图

根据AT32F437的原理图可以知道,我们的板子是自带了的串口的功能的,需要注意的是,JP4的跳线需要跳到串口上,不是USB的功能上,具体的请参考原理图,而且从原理图上也可以轻易的知道使用的是PA9和PA10的两个引脚。


串口功能选择

好了,下面就来上传一下代码吧。
下面是定时器的初始化以及配置函数。
#include "DRV_Time.h"


void Timer_Init(void)
{
       
crm_clocks_freq_type crm_clocks_freq_struct = {0};
  /* get system clock */
  crm_clocks_freq_get(&crm_clocks_freq_struct);
  /* enable tmr1 clock */
  crm_periph_clock_enable(CRM_TMR1_PERIPH_CLOCK, TRUE);

  /* tmr1 configuration */
  /* time base configuration */
  tmr_base_init(TMR1, 999, 287);//--288分频 =1M 1000计数,相当于1ms ----
  tmr_cnt_dir_set(TMR1, TMR_COUNT_UP);
  /* overflow interrupt enable */
  tmr_interrupt_enable(TMR1, TMR_OVF_INT, TRUE);
  /* tmr1 hall interrupt nvic init */
  nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
  nvic_irq_enable(TMR1_OVF_TMR10_IRQn, 1, 0);
  /* enable tmr1 */
  tmr_counter_enable(TMR1, TRUE);
}

unsigned int DATACount=0;

void TMR1_OVF_TMR10_IRQHandler(void)
{
  if(tmr_flag_get(TMR1, TMR_OVF_FLAG) == SET)
  {
    /* add user code... */
          DATACount++;
          if(DATACount==500)
          {
                gpio_bits_set(GPIOD,GPIO_PINS_15);
          }
          if(DATACount==1000)
          {
                  DATACount=0;
                 gpio_bits_reset(GPIOD,GPIO_PINS_15);
          }
    tmr_flag_clear(TMR1, TMR_OVF_FLAG);
  }
}

下面是串口的配置函数
#include "DRV_UART1.h"


void UART1_Init(void)
{
gpio_init_type gpio_init_struct;

  /* enable the usart2 and gpio clock */
  crm_periph_clock_enable(CRM_USART1_PERIPH_CLOCK, TRUE);
  crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);

  gpio_default_para_init(&gpio_init_struct);

  /* configure the usart2 tx, rx 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 = GPIO_PINS_9 | GPIO_PINS_10;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOA, &gpio_init_struct);
  gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE9, GPIO_MUX_7);
  gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE10, GPIO_MUX_7);


  /* config usart nvic interrupt */
  nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
  nvic_irq_enable(USART1_IRQn, 0, 0);

  /* configure usart2 param */
  usart_init(USART1, 115200, USART_DATA_8BITS, USART_STOP_1_BIT);
  usart_transmitter_enable(USART1, TRUE);
  usart_receiver_enable(USART1, TRUE);
  
  /* enable usart2 and usart3 interrupt */
  usart_interrupt_enable(USART1, USART_RDBF_INT, TRUE);
  usart_enable(USART1, TRUE);
}

void USART1_IRQHandler(void)
{

    if(usart_flag_get(USART1, USART_RDBF_FLAG) != RESET)
    {
                usart_flag_clear(USART1, USART_RDBF_FLAG);
                usart_data_transmit(USART1,usart_data_receive(USART1));
    }
//--
    if(usart_flag_get(USART1, USART_TDBE_FLAG) != RESET)
    {
        usart_flag_clear(USART1, USART_TDBE_FLAG);
    }
}



int fputc(int ch, FILE *f)
{
  while(usart_flag_get(USART1, USART_TDBE_FLAG) == RESET);
  usart_data_transmit(USART1, ch);
  return ch;
}       




串口测试

好了,说完了,还是把代码分享出来给大家把,到时候大家一起研究

代码: AT32F437_CoreMark.rar (2.75 MB)

如果快的话,下次和大家分享Coremark的代码



使用特权

评论回复
沙发
shenxiaolin|  楼主 | 2022-12-28 09:30 | 只看该作者
过来来看看

使用特权

评论回复
板凳
cemaj| | 2023-1-5 13:01 | 只看该作者
AT32F4的性能不错。              

使用特权

评论回复
地板
pentruman| | 2023-1-5 13:10 | 只看该作者
定时器可以到288吗?
              

使用特权

评论回复
评论
shenxiaolin 2023-1-5 13:43 回复TA
是的,定时器可以到288MHz 
5
rosemoore| | 2023-1-5 16:24 | 只看该作者
这个可以做不定长数据接收。              

使用特权

评论回复
6
wangdezhi| | 2023-1-6 14:08 | 只看该作者
这个有多少路的定时器?              

使用特权

评论回复
7
uiint| | 2023-1-6 14:57 | 只看该作者
这个最大的波特率是多少?              

使用特权

评论回复
8
bartonalfred| | 2023-1-6 15:28 | 只看该作者
这个板子不错,资源丰富。              

使用特权

评论回复
9
ingramward| | 2023-1-9 13:43 | 只看该作者
imer最多到288M?              

使用特权

评论回复
10
jkl21| | 2023-1-9 15:04 | 只看该作者
有多少路的定时器?              

使用特权

评论回复
11
primojones| | 2023-1-9 17:54 | 只看该作者
这个是要超频了吗?              

使用特权

评论回复
12
shenxiaolin|  楼主 | 2023-1-11 09:08 | 只看该作者
primojones 发表于 2023-1-9 17:54
这个是要超频了吗?

没有超频,只是现在的架构变了,定时器的入口有个倍频的操作。

使用特权

评论回复
13
shenxiaolin|  楼主 | 2023-1-11 09:11 | 只看该作者

是的,最高到288MHz

使用特权

评论回复
14
shenxiaolin|  楼主 | 2023-1-11 09:24 | 只看该作者
wangdezhi 发表于 2023-1-6 14:08
这个有多少路的定时器?

3个高级定时器,2个32位通用定时器,8个16位定时器。2个基本定时器,然后还有看门狗,systic,一般应该用不到这么多。哈哈哈

使用特权

评论回复
15
Bowclad| | 2023-2-7 19:00 | 只看该作者
最大的波特率是多少

使用特权

评论回复
16
shenxiaolin|  楼主 | 2023-2-8 09:27 | 只看该作者
Bowclad 发表于 2023-2-7 19:00
最大的波特率是多少

最大测试到921600

使用特权

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

本版积分规则

认证:运达电气-产品经理
简介:毕业于西南科技大学,从事MCU、MPU开发工作近8年,熟悉嵌入式软硬件开发流程,产品管理以及现场项目管理。

90

主题

1128

帖子

6

粉丝