[AT32F405] 【AT-START-F405测评】ADC单通道采样

[复制链接]
6709|5
 楼主| 班炳炳 发表于 2024-5-21 23:17 | 显示全部楼层 |阅读模式
本帖最后由 班炳炳 于 2024-5-21 23:15 编辑

#技术资源# #申请原创# 非常感谢雅特力官方给我这样一个测评的机会

芯片型号为AT32F405RCT7_7 主频高达216MHz,特色功能有:HS USB OTG (with PHY),FS USB OTG,12-bit 2 Msps 高速 ADC,QSPI / CAN / 8 UART / 3 SPI / 3 I2C,1 Full Duplex + 3 Half Duplex I2S,相关信息可以在雅特力官网查看
链接:https://www.arterytek.com/cn/product/AT32F405.jsp
87777664899f2eaeb1.png


点击下载资源即可跳转至资料下载板块
7789664899b0293d8.png

下载芯片数据手册,参考手册,开发板接口图,以及底层驱动源代码。
3405466489adc4412b.png

因为我使用的是Keil5 所以下载了相应的芯片包
926966489b7d95f5e.png
解压后 双击进行安装
577016648a1b14a97a.png

在Tool栏 AT的工具居然这么多样化 有AT32 IDE, AT32 Work Bench等,并配有详细的使用说明,更多工具大家可以到雅特力官网进行下载https://www.arterytek.com/cn/product/AT32F405.jsp

3877366489c213fe00.png

825686648a163c338d.png

不得不说 雅特力的工具及资料真的非常齐全
准备好以上工作之后 就可以开始编程了
这里我准备使用ADC1 通道1通过软件触发采样并通过串口打印出来

使用Keil新建工程(步骤省略......)
主要代码如下
  1. #include "at32f402_405_board.h"
  2. #include "at32f402_405_clock.h"

  3. crm_clocks_freq_type clocks_struct;
  4. void USART_init(uint32_t baud);
  5. void ADC_init(void);


  6. uint32_t adc_result = 0;
  7. float adc_value = 0.0;

  8. int main(void)
  9. {
  10.     system_clock_config();//系统时钟初始化
  11.     nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);//设置中断分组
  12.     at32_board_init();//延时函数初始化
  13.     crm_clocks_freq_get(&clocks_struct);
  14.     USART_init(115200);//串口初始化函数
  15.     ADC_init();//ADC初始化函数
  16.    
  17.     printf("test code.....!!!!\r\n");
  18.    
  19.     printf("software_trigger_repeat \r\n");
  20.    
  21.     while(1)
  22.     {
  23.         while(adc_flag_get(ADC1, ADC_CCE_FLAG) == RESET);//等待转换完成
  24.         adc_result = adc_ordinary_conversion_data_get(ADC1);
  25.         printf("adc_result = %d\r\n", adc_result);
  26.         adc_value = adc_result * 3.3 / 4095;
  27.         printf("adc_result = %0.2f\r\n", adc_value);
  28.         delay_ms(2000);
  29.     }
  30. }

  31. void ADC_init(void)
  32. {
  33.     gpio_init_type gpio_initstructure;
  34.     adc_base_config_type adc_base_struct;
  35.     crm_periph_clock_enable(CRM_ADC1_PERIPH_CLOCK, TRUE);
  36.     crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);

  37.     gpio_default_para_init(&gpio_initstructure);//GPIO默认参数初始化
  38.     /* config adc pin as analog input mode */
  39.     gpio_initstructure.gpio_mode = GPIO_MODE_ANALOG;//模拟输入
  40.     gpio_initstructure.gpio_pins = GPIO_PINS_1;//ADC1通道1
  41.     gpio_init(GPIOA, &gpio_initstructure);
  42.    
  43.     adc_clock_div_set(ADC_DIV_16);//ADC时钟16分频
  44.    
  45.     adc_base_default_para_init(&adc_base_struct);//ADC默认参数初始化
  46.     adc_base_struct.sequence_mode = TRUE;//序列模式
  47.     adc_base_struct.repeat_mode = TRUE;//开启反复模式 每次触发转换一组通道  连续模式
  48.     adc_base_struct.data_align = ADC_RIGHT_ALIGNMENT;//数据右对齐
  49.     adc_base_struct.ordinary_channel_length = 1;//普通通道序列长度  1
  50.     adc_base_config(ADC1, &adc_base_struct);

  51.     /* ADC1初始化普通通道  1:将通道1放在ADC转换菜单的第一个位置 */
  52.     adc_ordinary_channel_set(ADC1, ADC_CHANNEL_1, 1, ADC_SAMPLETIME_41_5);//ADC采样时间41.5个周期

  53.     /* 普通通道转换组触发模式使能及触发事件选择 */
  54.     adc_ordinary_conversion_trigger_set(ADC1, ADC12_ORDINARY_TRIG_SOFTWARE, TRUE);//使用软件触发

  55.     /* adc enable */
  56.     adc_enable(ADC1, TRUE);//ADC1使能

  57.     /* adc calibration */
  58.     adc_calibration_init(ADC1);//ADC初始化校准
  59.     while(adc_calibration_init_status_get(ADC1));//初始化校准状态获取
  60.     adc_calibration_start(ADC1);//ADC校准开始
  61.     while(adc_calibration_status_get(ADC1));//ADC校准状态获取
  62.     /* 反复转换模式打开:软件触发使能之后会一直进行转换 */
  63.     /* 反复转换模式关闭:软件触发使能之后会转换一次就结束了 */
  64.     adc_ordinary_software_trigger_enable(ADC1, TRUE);//软件触发使能打开
  65. }

  66. void USART_init(uint32_t baud)
  67. {
  68.     gpio_init_type gpio_init_struct;

  69.     crm_periph_clock_enable(CRM_USART1_PERIPH_CLOCK, TRUE);//开启串口1时钟
  70.     crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);//开启GPIOA时钟

  71.     gpio_default_para_init(&gpio_init_struct);

  72.     /* configure the TX pin */
  73.     gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;//适中电流推动
  74.     gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;//推挽输出
  75.     gpio_init_struct.gpio_mode = GPIO_MODE_MUX;//复用模式
  76.     gpio_init_struct.gpio_pins = GPIO_PINS_9;
  77.     gpio_init_struct.gpio_pull = GPIO_PULL_NONE;//无上下拉
  78.     gpio_init(GPIOA, &gpio_init_struct);
  79.     gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE9, GPIO_MUX_7);//配置引脚复用功能

  80.     /* configure the RX pin */
  81.     gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;//适中电流推动
  82.     gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;//推挽输出
  83.     gpio_init_struct.gpio_mode = GPIO_MODE_MUX;//复用模式
  84.     gpio_init_struct.gpio_pins = GPIO_PINS_10;
  85.     gpio_init_struct.gpio_pull = GPIO_PULL_NONE;//无上下拉
  86.     gpio_init(GPIOA, &gpio_init_struct);
  87.     gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE10, GPIO_MUX_7);

  88.     /* configure param */
  89.     usart_init(USART1, baud, USART_DATA_8BITS, USART_STOP_1_BIT);//波特率 8位数据位 1位停止位
  90.     usart_transmitter_enable(USART1, TRUE);//发送使能
  91.     usart_receiver_enable(USART1, TRUE);//接收使能
  92.     usart_parity_selection_config(USART1, USART_PARITY_NONE);//无奇偶校验

  93.     usart_hardware_flow_control_set(USART1, USART_HARDWARE_FLOW_NONE);//无需硬件流控

  94.     usart_enable(USART1, TRUE);
  95. }

输出结果如下
191236648a6272101a.png



AT32F405RCT7_7(adc_single_channel ).zip

5.11 MB, 下载次数: 8

yangjiaxu 发表于 2024-5-23 10:05 | 显示全部楼层
一般是4096 = 3.3V还是4095 = 3.3V啊?

评论

你好,我们是雅特力代理商,有机会和你聊下吗  发表于 2024-9-21 15:29
问天少年 发表于 2024-5-23 16:00 | 显示全部楼层
yangjiaxu 发表于 2024-5-23 10:05
一般是4096 = 3.3V还是4095 = 3.3V啊?

应该是4095
gangong 发表于 2024-10-31 07:20 | 显示全部楼层
给楼主点赞
呐咯密密 发表于 2024-11-4 10:28 | 显示全部楼层
雅特力的手册确实很丰富,关键是均有中文手册,开发很舒适
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

16

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部