用户工具

站点工具


icore3l_arm_12

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
icore3l_arm_12 [2020/11/18 09:57]
zgf
icore3l_arm_12 [2022/03/19 11:00] (当前版本)
sean
行 2: 行 2:
 |技术支持电话|**0379-69926675-801** ​ ||| |技术支持电话|**0379-69926675-801** ​ |||
 |技术支持邮件|Gingko@vip.163.com ​ ||| |技术支持邮件|Gingko@vip.163.com ​ |||
-|技术论坛|http://​www.eeschool.org ​ ||| 
 ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^
 |  V1.0  |  2020-11-18 ​ | gingko ​ |  初次建立 ​ | |  V1.0  |  2020-11-18 ​ | gingko ​ |  初次建立 ​ |
行 15: 行 14:
 {{ :​icore3l:​icore3l_cube_12_4.png |}} {{ :​icore3l:​icore3l_cube_12_4.png |}}
 {{ :​icore3l:​icore3l_cube_12_5.png |}} {{ :​icore3l:​icore3l_cube_12_5.png |}}
-5.将PI3,​PI4,​PH14设置为GPIO_Output,PG9设置为GPIO_Input+5.将PI3,​PI4,​PH14设置为GPIO_Output
 {{ :​icore3l:​icore3l_cube_12_6.png |}} {{ :​icore3l:​icore3l_cube_12_6.png |}}
 引脚模式配置 引脚模式配置
-{{ :​icore3l:​icore3l_cube_12_7.jpg |}}+{{ :​icore3l:​icore3l_cube_12_7.png |}}
 6.配置DAC 6.配置DAC
 {{ :​icore3l:​icore3l_cube_12_8.png |}} {{ :​icore3l:​icore3l_cube_12_8.png |}}
行 24: 行 23:
 {{ :​icore3l:​icore3l_cube_12_9.png |}} {{ :​icore3l:​icore3l_cube_12_9.png |}}
 定时器中断使能 定时器中断使能
-{{ :​icore3l:​icore3l_cube_12_10.jpg |}}+{{ :​icore3l:​icore3l_cube_12_10.png |}}
 8.配置SD卡 8.配置SD卡
 {{ :​icore3l:​icore3l_cube_12_11.png |}} {{ :​icore3l:​icore3l_cube_12_11.png |}}
行 47: 行 46:
   * **Add necessary library files as reference in the toolchain project configuration file**   * **Add necessary library files as reference in the toolchain project configuration file**
   * **不复制文件,直接从软件包存放位置导入.C和.H**   * **不复制文件,直接从软件包存放位置导入.C和.H**
-  ​* 优点:体积小,比较节约硬盘空间 +    ​* 优点:体积小,比较节约硬盘空间 
-  * 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径自行选择方式即可+    * 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径 
 +  * 自行选择方式即可
 13.然后点击GENERATE CODE创建工程 13.然后点击GENERATE CODE创建工程
 {{ :​icore3l:​icore3l_cube_12_17.png |}} {{ :​icore3l:​icore3l_cube_12_17.png |}}
行 65: 行 65:
 ==== 二、实验设备及平台 ==== ==== 二、实验设备及平台 ====
   - iCore3L 双核心板   - iCore3L 双核心板
-  - iCore3L 扩展底板 
   - JLINK(或相同功能)仿真器   - JLINK(或相同功能)仿真器
   - Micro USB线缆   - Micro USB线缆
行 140: 行 139:
 == 4.1 什么是频率 == == 4.1 什么是频率 ==
 频率是指单位时间内某事件重复的次数。在电子学中,信号的频率是指单位时间内信号的周期数,单位是赫兹(Hertz,简称Hz)。很多年前有一个著名的德国物理学家海因里希· 鲁道夫·赫兹,他首先证明了电磁波的存在,为了纪念他,频率的单位就用他的名字命名。频率是一个非常常用、也是一个非常重要的国际单位;日常生活中,我们收听的收音机、观看的电视机、交流市电、移动蜂窝电话等信号的传输过程,都利用了信号的频率特性。频率与信号的周期互为倒数关系,所以频率也可以表示为: 频率是指单位时间内某事件重复的次数。在电子学中,信号的频率是指单位时间内信号的周期数,单位是赫兹(Hertz,简称Hz)。很多年前有一个著名的德国物理学家海因里希· 鲁道夫·赫兹,他首先证明了电磁波的存在,为了纪念他,频率的单位就用他的名字命名。频率是一个非常常用、也是一个非常重要的国际单位;日常生活中,我们收听的收音机、观看的电视机、交流市电、移动蜂窝电话等信号的传输过程,都利用了信号的频率特性。频率与信号的周期互为倒数关系,所以频率也可以表示为:
-{{ :​icore3l:​icore3l_arm_hal_12_7.png |}}+{{ :​icore3l:​icore3l_arm_hal_12_7.jpg |}}
 == 4.2 怎么得到任意频率的信号 == == 4.2 怎么得到任意频率的信号 ==
   * 既然信号的频率特性那么重要,我们怎么样才能得到自己想要的频率的信号呢?一般来说,我们通过下面三种方法得到想要的频率信号。   * 既然信号的频率特性那么重要,我们怎么样才能得到自己想要的频率的信号呢?一般来说,我们通过下面三种方法得到想要的频率信号。
行 156: 行 155:
 {{ :​icore3l:​icore3l_arm_hal_12_9.jpg |}} {{ :​icore3l:​icore3l_arm_hal_12_9.jpg |}}
   * 如果把调谐字(TUNING WORD)设置为最小值1,带入方程式(2)则可得到最小输出频率,也就是频率分辨率。通过公式(3)我们可以看出,相位累加器位数越高,则频率分辨率越高。在100MHz的采样时钟下,48位的相位累加器可以使得频率分辨率优于 1μHz。   * 如果把调谐字(TUNING WORD)设置为最小值1,带入方程式(2)则可得到最小输出频率,也就是频率分辨率。通过公式(3)我们可以看出,相位累加器位数越高,则频率分辨率越高。在100MHz的采样时钟下,48位的相位累加器可以使得频率分辨率优于 1μHz。
-{{ :​icore3l:​icore3l_arm_hal_12_10.png |}}+{{ :​icore3l:​icore3l_arm_hal_12_10.jpg |}}
 ** 4.4.2 角度-幅度转换** ** 4.4.2 角度-幅度转换**
   * 相位累加器的输出为线性的,如果我们需要输出任意的波形,我们则需要角度-幅度转换。一般地可以通过查找表的方法来实现。相位累加器的输出作为查找表的地址,数据线作为内容输出,则完成了角度-幅度转换。图四示意图为单周期正弦波查找表,n位的相位累加器输出(线性变化)作为查找表的地址线,数据输出端则为按正弦规律变化的数字序列。   * 相位累加器的输出为线性的,如果我们需要输出任意的波形,我们则需要角度-幅度转换。一般地可以通过查找表的方法来实现。相位累加器的输出作为查找表的地址,数据线作为内容输出,则完成了角度-幅度转换。图四示意图为单周期正弦波查找表,n位的相位累加器输出(线性变化)作为查找表的地址线,数据输出端则为按正弦规律变化的数字序列。
行 210: 行 209:
 } }
 </​code>​ </​code>​
 +2.set_frequency函数
 +<code c>
 +static int set_frequency(int freq)
 +{
 +  //​32位相位累加器 400K 采样率
 +  wave.accumulator = 0;
 +  wave.fword = (int)(freq * 4294.967296 * 2.5);
 +  return 0;
 +}
 +</​code>​
 +3.HAL_DAC_SetValue函数
 +<code c>
 +HAL_DAC_SetValue(DAC_HandleTypeDef *hdac,​ uint32_t Channel,​ uint32_t Alignment,​ uint32_t Data)
 +//​hdac:​指向DAC_HandleTypeDef结构的指针
 +//​Channel:​选定DAC通道
 +//​Alignment:​数据对方方式
 +//​Data:​放入寄存器中的值
 +</​code>​
 +4.DAC初始化函数
 +<code c>
 +void MX_DAC1_Init(void)
 +{
 +  DAC_ChannelConfTypeDef sConfig = {0};​
 +  hdac1.Instance = DAC1;​
 +  if (HAL_DAC_Init(&​hdac1) != HAL_OK)
 +  {
 +    Error_Handler();​
 +  }
 +  sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;//​关闭
 +  sConfig.DAC_Trigger = DAC_TRIGGER_NONE;//​关闭DAC触发
 +  sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;//​使用输出缓存,提高驱动力
 +  sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_DISABLE;//​关闭DAC芯片连接
 +  sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;//​缓冲器偏移校准采用出厂修整
 +  if (HAL_DAC_ConfigChannel(&​hdac1,​ &​sConfig,​ DAC_CHANNEL_1) != HAL_OK)
 +  {
 +    Error_Handler();​
 +  }
 +}
 +</​code>​
 +==== 五、实验步骤 ====
 + 
 +  - 把仿真器与iCore3L的SWD调试口相连(直接相连或者通过转接器相连);
 +  - 将iCore3L与扩展底板相连,为扩展板供电;
 +  - 打开Keil MDK 开发环境,并打开本实验工程;
 +  - 烧写程序到iCore3L上;
 +  - 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。
 +==== 六、实验现象 ====
 +用示波器测量iCore3L底板的DAC引脚(PA4)可以看到2Vpp 1KHz的正弦波,如下图。
 +{{ :​icore3l:​icore3l_arm_hal_12_13.jpg |}}
icore3l_arm_12.1605664649.txt.gz · 最后更改: 2020/11/18 09:57 由 zgf