STM32 SPIによるMAX5144
STM32 SPIによるMAX5144
1・ピン配置
ConnectivityのSPI1を選択、SSピン(素子選択)用に隣のピン(PA4)をGPIOのOUTに指定する。通信速度があり、Prescalerのところで倍率を設定することができる。18Mとかが設定可能。ただ配線などに気を配らないとあまり早いと送り込む命令が0xFFFF→0x0000とかで急激に変化するところでエラーを起こしていた事があり、そこそこに設定している。
結構、はまるで最初はゆっくり目からスタートして動く事を確認してからはやくするなどがおすすめ。
POLARITYは、素子選択がLOWで検出(選択されれない時HIGH)なのか、またその逆か?1EDGEは、立ち上がりを検出2EDGEは立下り検出など。モードが全部で4種類ある事になる。ここいらは使うSPIの素子のデータシートを見て設定する。MAX5144はモードゼロ。
2,コーディング
/* USER CODE BEGIN 2 */
//DAC variables
float Vset=0.740;
float Vdacref=1.500;//5144のREFに入力している電圧。ここでは1.5V。
uint16_t DataInt;
uint8_t Datatemp1;
uint8_t Datatemp2;
uint8_t temp[2];
DataInt=Vset/Vdacref*16384;//5144は14bitのDAC。
DataInt=DataInt <<2;//0010 0000 1010 0101→1000 0010 1001 0100
Datatemp1=DataInt >> 8; //0000 0000 1000 0000
Datatemp2=DataInt & 0xFF; //0000 0000 1001 0100
temp[0]=Datatemp1;//
temp[1]=Datatemp2;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);//おまじない
__HAL_SPI_ENABLE(&hspi1);//おまじない この2行なくてもよい
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, (uint8_t*)temp, 2, 100);
HAL_Delay(10);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
/* USER CODE END 2 */
コメント
コメントを投稿