久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1517|回復: 5
打印 上一主題 下一主題
收起左側

STM32部分代碼分析

[復制鏈接]
跳轉到指定樓層
樓主
ID:709761 發表于 2022-3-8 08:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 李冬 于 2022-3-9 08:22 編輯

因本人看不懂STM32代碼。下載別人的代碼,想知道輸出的兩種正弦波波形的頻率分別是多少


#define tableSize 33
//正弦波波形數據
//波形數據
//uint32_t sinTable[tableSize] = {1024, 1217, 1404, 1577, 1730, 1858, 1955, 2019, 2046, 2037, 1991, 1910, 1797, 1656, 1493, 1312, 1121, 927, 736, 555, 392, 251, 138, 57, 11, 2, 29, 93, 190, 318, 471, 644, 831};
uint32_t sinTable[tableSize] = {1536, 1729, 1916, 2089, 2242, 2370, 2467, 2531, 2558, 2549, 2503, 2422, 2309, 2168, 2005, 1824, 1633, 1439, 1248, 1067, 904, 763, 650, 569, 523, 514, 541, 605, 702, 830, 983, 1156, 1343};

//輸出正弦波,定時調用
void RESCHECK_PutSin(void)
{
        //輸出當前位置的正弦波參數
        //LL_DAC_ConvertData12RightAligned(DAC2, LL_DAC_CHANNEL_1, sinTable[sin_wave_pos]);
        //LL_DAC_ConvertData12RightAligned(DAC2, LL_DAC_CHANNEL_1, 0);
        DAC2->DHR12R1 = sinTable[sin_wave_pos];
        //正弦波位置+1
        ++sin_wave_pos;
        //如果sin_wave_pos>=tableSize,則sin_wave_pos=0
        if(sin_wave_pos >= tableSize){
                sin_wave_pos = 0;
        }
}


static void MX_DAC2_Init(void)
{

  /* USER CODE BEGIN DAC2_Init 0 */

  /* USER CODE END DAC2_Init 0 */

  LL_DAC_InitTypeDef DAC_InitStruct = {0};

  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* Peripheral clock enable */
  LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_DAC2);

  LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
  /**DAC2 GPIO Configuration
  PA6   ------> DAC2_OUT1
  */
  GPIO_InitStruct.Pin = LL_GPIO_PIN_6;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* DAC2 DMA Init */

  /* DAC2_CH1 Init */
  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_DAC2_CH1);

  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);

  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_LOW);

  LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_CIRCULAR);

  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT);

  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT);

  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_WORD);

  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_WORD);

  /* USER CODE BEGIN DAC2_Init 1 */

  /* USER CODE END DAC2_Init 1 */
  /** DAC channel OUT1 config
  */
  LL_DAC_SetSignedFormat(DAC2, LL_DAC_CHANNEL_1, LL_DAC_SIGNED_FORMAT_DISABLE);
  DAC_InitStruct.TriggerSource = LL_DAC_TRIG_EXT_TIM6_TRGO;
  DAC_InitStruct.TriggerSource2 = LL_DAC_TRIG_SOFTWARE;
  DAC_InitStruct.WaveAutoGeneration = LL_DAC_WAVE_AUTO_GENERATION_NONE;
  DAC_InitStruct.OutputBuffer = LL_DAC_OUTPUT_BUFFER_DISABLE;
  DAC_InitStruct.OutputConnection = LL_DAC_OUTPUT_CONNECT_GPIO;
  DAC_InitStruct.OutputMode = LL_DAC_OUTPUT_MODE_NORMAL;
  LL_DAC_Init(DAC2, LL_DAC_CHANNEL_1, &DAC_InitStruct);
  LL_DAC_EnableTrigger(DAC2, LL_DAC_CHANNEL_1);
  LL_DAC_DisableDMADoubleDataMode(DAC2, LL_DAC_CHANNEL_1);
  /* USER CODE BEGIN DAC2_Init 2 */

  /* USER CODE END DAC2_Init 2 */

}


static void MX_TIM6_Init(void)
{

  /* USER CODE BEGIN TIM6_Init 0 */

  /* USER CODE END TIM6_Init 0 */

  LL_TIM_InitTypeDef TIM_InitStruct = {0};

  /* Peripheral clock enable */
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM6);

  /* USER CODE BEGIN TIM6_Init 1 */

  /* USER CODE END TIM6_Init 1 */
  TIM_InitStruct.Prescaler = 84;
  TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
  TIM_InitStruct.Autoreload = 1;
  LL_TIM_Init(TIM6, &TIM_InitStruct);
  LL_TIM_EnableARRPreload(TIM6);
  LL_TIM_SetTriggerOutput(TIM6, LL_TIM_TRGO_UPDATE);
  LL_TIM_DisableMasterSlaveMode(TIM6);
  /* USER CODE BEGIN TIM6_Init 2 */

  /* USER CODE END TIM6_Init 2 */

}

        //==================啟動正弦波發生器==================
        //配置DMA
        //關閉DMA
        LL_DMA_DisableChannel(DMA1,LL_DMA_CHANNEL_1);
        //設置DMA傳輸的設備地址
        LL_DMA_SetPeriphAddress(DMA1,
                                                                                                        LL_DMA_CHANNEL_1,
                                                                                                        LL_DAC_DMA_GetRegAddr(DAC2,LL_DAC_CHANNEL_1,LL_DAC_DMA_REG_DATA_12BITS_RIGHT_ALIGNED));
        //設置DMA傳輸的內存地址
        LL_DMA_SetMemoryAddress(DMA1,LL_DMA_CHANNEL_1,(uint32_t)&sinTable);       
        //設置DMA傳輸的數據長度
        LL_DMA_SetDataLength(DMA1,LL_DMA_CHANNEL_1,tableSize);
        //使能DMA
        LL_DMA_EnableChannel(DMA1,LL_DMA_CHANNEL_1);
        //使能DAC的DMA請求
        LL_DAC_EnableDMAReq(DAC2, LL_DAC_CHANNEL_1);
        //使能DAC
        LL_DAC_Enable(DAC2, LL_DAC_CHANNEL_1);
        //TIM6計數使能
        LL_TIM_EnableCounter(TIM6);
}




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:844772 發表于 2022-3-8 10:22 | 只看該作者
你能否直接說,函數 void RESCHECK_PutSin(void) ,多長時間執行一次?
回復

使用道具 舉報

板凳
ID:1008928 發表于 2022-3-8 10:54 | 只看該作者
輸出受time6控制。頻率多少要看定時器的配置。修改定時器   變頻。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:709761 發表于 2022-3-8 11:02 | 只看該作者
glinfei 發表于 2022-3-8 10:22
你能否直接說,函數 void RESCHECK_PutSin(void) ,多長時間執行一次?

不知道,代碼里沒有看到
回復

使用道具 舉報

5#
ID:879809 發表于 2022-3-8 19:45 | 只看該作者
你只貼了DAC初始化的內容,而你的問題答案在TIM初始化代碼里面。
回復

使用道具 舉報

6#
ID:709761 發表于 2022-3-9 08:15 | 只看該作者
hysychen 發表于 2022-3-8 10:54
輸出受time6控制。頻率多少要看定時器的配置。修改定時器   變頻。

static void MX_TIM6_Init(void)
{

  /* USER CODE BEGIN TIM6_Init 0 */

  /* USER CODE END TIM6_Init 0 */

  LL_TIM_InitTypeDef TIM_InitStruct = {0};

  /* Peripheral clock enable */
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM6);

  /* USER CODE BEGIN TIM6_Init 1 */

  /* USER CODE END TIM6_Init 1 */
  TIM_InitStruct.Prescaler = 84;
  TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
  TIM_InitStruct.Autoreload = 1;
  LL_TIM_Init(TIM6, &TIM_InitStruct);
  LL_TIM_EnableARRPreload(TIM6);
  LL_TIM_SetTriggerOutput(TIM6, LL_TIM_TRGO_UPDATE);
  LL_TIM_DisableMasterSlaveMode(TIM6);
  /* USER CODE BEGIN TIM6_Init 2 */

  /* USER CODE END TIM6_Init 2 */

}

/**
  * @brief USART1 Initialization Function
  * @param None
  * @retval None
  */
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久影院色老大 | 亚洲国产精品一区 | 美女国产| 天天看天天操 | 色视频成人在线观看免 | 国产在线视频三区 | 久久国产福利 | 久久在线精品 | 亚洲国产欧美国产综合一区 | 免费福利视频一区二区三区 | 亚洲欧美国产精品久久 | 欧美日韩在线免费 | 欧美日韩综合视频 | 国产精品麻 | 小视频你懂得 | 国产乱码精品一区二区三区五月婷 | 亚洲综合一区二区三区 | 欧美一区二区三区日韩 | 成人免费毛片在线观看 | 久久久精品视频免费看 | 东方伊人免费在线观看 | 国产精品1区2区3区 男女啪啪高潮无遮挡免费动态 | 超碰免费在 | 精品欧美一区二区三区久久久 | 亚洲高清久久 | 国产成人一区二区 | 久久精品亚洲精品国产欧美kt∨ | 国产精选一区 | 日本手机看片 | caoporn国产精品免费公开 | 成人av色| 日日摸日日碰夜夜爽亚洲精品蜜乳 | 亚洲一区二区三区四区五区中文 | 中文字幕国产精品 | 成人精品在线视频 | 亚洲一区二区电影在线观看 | 性色在线| 日韩欧美理论片 | 6996成人影院网在线播放 | 一区二区视频在线 | 久久综合九色综合欧美狠狠 |