기본프로젝트를 다운로드 받는다. 어디? 여기에!
OpenCR Board Schemetic 에서는 DAC를 사용하기 위하여 회로도를 찾아봤지만 DAC 정보를 찾을수가 없었습니다.
Datasheet 를 이용하여 핀번호를 확인 할 수 있습니다.
![Find DAC Port Using STM32F7 Datasheet](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/10/image-38-686x1024.png?resize=686%2C1024)
DAC 1 번 포트는 40번, DAC 2번 포트는 41번이 있다는것을 확인 했습니다…
저 귀여운놈들(?) 은 무슨놈에 묶여 있을까 회로도를 찾아보았습니다.
![OpenCR Circuit PA4/PA5](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/10/image-39.png?resize=364%2C162)
![DAC port bound by gyro sensor.](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/10/image-40-1024x468.png?resize=843%2C385)
회로도를 보면 알겠지만 연구소에는 R1005 사이즈의 칩을 사용하지 않습니다.
그렇기 때문에 R52 저항을 가볍게 날려버리고 DAC 1번을 사용해 보도록 합시다.
![OpenCR R52/R53 Position](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/10/image-41-1024x711.png?resize=843%2C585)
프로젝트에 생성되어 있는 cube.ioc 아이콘을 더블클릭합니다.
![Run Cube.ioc](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/10/image-42.png?resize=400%2C845)
![Enable DAC with Cube MX](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/10/image-43-1024x577.png?resize=843%2C475)
![MX_DAC_Init function of bsp.c file.](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/10/image-45-1024x408.png?resize=843%2C336)
extern void MX_DAC_Init(void); MX_DAC_Init();
![make dac.c and dac.h](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/10/image-44.png?resize=400%2C480)
![Add/remove include path...](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/07/20190710_125727.png?resize=357%2C561)
![Write dac.c Code](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/10/image-46-1024x408.png?resize=843%2C336)
#include "dac.h" DAC_HandleTypeDef hdac; void dacInit(void) { HAL_DAC_Start(&hdac, DAC1_CHANNEL_1); }
![Write dac.h Code](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/10/image-47-1024x408.png?resize=843%2C336)
#include "hw_def.h" extern HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel);
![](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/10/image-48-1024x659.png?resize=843%2C543)
#include <math.h> #define PI 3.141592 #define SAMPLES 200 extern DAC_HandleTypeDef hdac; extern void MX_DAC_Init(void); extern void dacInit(void); uint16_t VI[SAMPLES]; uint16_t value; void apInit(void) { dacInit(); } void apMain(void) { for(int i=0; i<SAMPLES; i++){ value = (uint16_t)rint((sinf(((2*PI)/SAMPLES)*i)+1)*2048); VI[i] = value < 4096 ? value : 4095; } while(1) { for(int i=0; i < SAMPLES; i++){ HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, VI[i]); HAL_Delay(1); } } }
![Sin Signal Generated Using DAC](https://i0.wp.com/odenwar.synology.me/Blog/wp-content/uploads/2019/10/image-49.png?resize=800%2C600)