実行環境
- Nucleo-F446RE
- STM32CubeMX Version 5.1.0
- System Workbench for STM32 - C/C++ Embedded Development Tools for MCU Version: 2.8.1.201903050911
プロジェクト:
https://github.com/ryood/STM32Cube_Test/tree/master/SW4STM32/Nucleo-F446_MCP4922_Test1
STM32CubeMXの設定
MCP4922はMISOが必要ないのでSPIは「Transmit Only Master」でOKです。
GPIOは、SPIのNSS(CS)をソフトウェアで制御するのに1つ、2ch分ラッチして出力するのでLDAC1つで計2本です。
SW4STM32でコードを追加(一部)
/* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ // param // channel: 0, 1 // val: 0 .. 4095 void MCP4922_Write(uint8_t channel, uint16_t val) { channel = channel & 0x01; val = val & 0x0fff; uint8_t cmd[2]; cmd[0] = (channel << 7) | (val >> 8) | 0x30; cmd[1] = val & 0xff; HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET); if (HAL_SPI_Transmit(&hspi1, cmd, 2, 100) != HAL_OK) { Error_Handler(); } HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET); } /* USER CODE END 0 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ uint16_t cnt = 0; while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_GPIO_WritePin(LDAC_GPIO_Port, LDAC_Pin, GPIO_PIN_SET); MCP4922_Write(0, cnt); MCP4922_Write(1, 4095 - cnt); HAL_GPIO_WritePin(LDAC_GPIO_Port, LDAC_Pin, GPIO_PIN_RESET); cnt++; if (cnt > 4095) { cnt = 0; } } /* USER CODE END 3 */
ノコギリ波の非反転、反転を出力しました。
出力結果
ch1:VOUTA ch2:VOUTB
0 件のコメント:
コメントを投稿