找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3832|回复: 0
打印 上一主题 下一主题
收起左侧

stm32dac输出正弦波,python生产正弦波的数组

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
  1. #include "./dac/bsp_dac.h"

  2. //正弦波单个周期的点数
  3. #define POINT_NUM 32

  4. /* 波形数据 ---------------------------------------------------------*/
  5. const uint16_t Sine12bit[POINT_NUM] = {
  6.         2048        , 2460        , 2856        , 3218        , 3532        , 3786        , 3969        , 4072        ,
  7.         4093        , 4031        , 3887        , 3668        , 3382        , 3042        ,        2661        , 2255        ,
  8.         1841        , 1435        , 1054        , 714                , 428                , 209                , 65                , 3                        ,
  9.         24                , 127                , 310                , 564                , 878                , 1240        , 1636        , 2048
  10. };


  11. uint32_t DualSine12bit[POINT_NUM];


  12. /**
  13.   * @brief  使能DAC的时钟,初始化GPIO
  14.   * @param  无
  15.   * @retval 无
  16.   */
  17. static void DAC_Config(void)
  18. {
  19.   GPIO_InitTypeDef GPIO_InitStructure;
  20.         DAC_InitTypeDef  DAC_InitStructure;

  21.   /* 使能GPIOA时钟 */
  22.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);       
  23.        
  24.         /* 使能DAC时钟 */       
  25.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  26.        
  27.   /* DAC的GPIO配置,模拟输入 */
  28.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4 | GPIO_Pin_5;
  29.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  30.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  31.        


  32.   /* 配置DAC 通道1 */
  33.   DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;                                                //使用TIM2作为触发源
  34.   DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;        //不使用波形发生器
  35.   DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;        //不使用DAC输出缓冲
  36.   DAC_Init(DAC_Channel_1, &DAC_InitStructure);

  37.   /* 配置DAC 通道2 */
  38.   DAC_Init(DAC_Channel_2, &DAC_InitStructure);

  39.   /* 使能通道1 由PA4输出 */
  40.   DAC_Cmd(DAC_Channel_1, ENABLE);
  41.   /* 使能通道2 由PA5输出 */
  42.   DAC_Cmd(DAC_Channel_2, ENABLE);

  43.   /* 使能DAC的DMA请求 */
  44.   DAC_DMACmd(DAC_Channel_2, ENABLE);
  45. }


  46. /**
  47.   * @brief  配置TIM
  48.   * @param  无
  49.   * @retval 无
  50.   */
  51. static void DAC_TIM_Config(void)
  52. {
  53.        
  54.         TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;
  55.        
  56.         /* 使能TIM2时钟,TIM2CLK 为72M */
  57.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  58.        
  59.   /* TIM2基本定时器配置 */
  60. // TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  61.   TIM_TimeBaseStructure.TIM_Period = (2250-1);                                                                               //定时周期 20  
  62.   TIM_TimeBaseStructure.TIM_Prescaler = 0x0;                                                               //预分频,不分频 72M / (0+1) = 72M
  63.   TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;                                                    //时钟分频系数
  64.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;          //向上计数模式
  65.   TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  66.   /* 配置TIM2触发源 */
  67.   TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);

  68.         /* 使能TIM2 */
  69.   TIM_Cmd(TIM2, ENABLE);

  70. }

  71. /**
  72.   * @brief  配置DMA
  73.   * @param  无
  74.   * @retval 无
  75.   */
  76. static void DAC_DMA_Config(void)
  77. {       
  78.         DMA_InitTypeDef  DMA_InitStructure;

  79.         /* 使能DMA2时钟 */
  80.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
  81.        
  82.         /* 配置DMA2 */
  83.   DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12RD_ADDRESS;                                        //外设数据地址
  84.   DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&DualSine12bit ;                                //内存数据地址 DualSine12bit
  85.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;                                                                                        //数据传输方向内存至外设
  86.   DMA_InitStructure.DMA_BufferSize = POINT_NUM;                                                                                                                                        //缓存大小为POINT_NUM字节       
  87.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                                //外设数据地址固定       
  88.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                                                        //内存数据地址自增
  89.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;        //外设数据以字为单位
  90.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;                                        //内存数据以字为单位       
  91.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                                                                                                        //循环模式
  92.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;                                                                                        //高DMA通道优先级
  93.   DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                                                                                                                //非内存至内存模式       

  94.   DMA_Init(DMA2_Channel4, &DMA_InitStructure);
  95.        
  96.   /* 使能DMA2-14通道 */
  97.   DMA_Cmd(DMA2_Channel4, ENABLE);
  98. }


  99. /**
  100.   * @brief  DAC初始化函数
  101.   * @param  无
  102.   * @retval 无
  103.   */
  104. void DAC_Mode_Init(void)
  105. {
  106.         uint32_t Idx = 0;  

  107.         DAC_Config();
  108.         DAC_TIM_Config();       
  109.        
  110.         /* 填充正弦波形数据,双通道右对齐*/
  111.   for (Idx = 0; Idx < POINT_NUM; Idx++)
  112.   {
  113.     DualSine12bit[Idx] = (Sine12bit[Idx] << 16) + (Sine12bit[Idx]);
  114.   }
  115.        
  116.         DAC_DMA_Config();
  117. }
复制代码

所有资料51hei提供下载:
DAC—输出正弦波.rar (294.27 KB, 下载次数: 65)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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