HY-STM32_100P - STM32F103VET6 - Cortex M3
Received this cheap dev board with STM32F103VET6 MCU(ARM Cortex M3) from ebay. Some code examples are bellow. Feel free to use it in your project.
STM32 and AD9850
void MM_AD9850_Init() { /* Initialize AD9850 PA0 - W_CLK PA1 - FQ_UD PA2 - DATA PA3 - RESET All output 2Mhz */ // enable GPIOA RCC->APB2ENR = RCC_APB2ENR_IOPAEN; // set pin as output, 2Mhz GPIOA->CRL = GPIO_CRL_MODE0_1 | GPIO_CRL_MODE1_1 | GPIO_CRL_MODE2_1 | GPIO_CRL_MODE3_1; // enable serial mode (datasheet page 12 figure 10) // UP GPIOA->BSRR = 1<<3 | 1<<0 | 1<<1; //DOWN GPIOA->BRR = 1<<3 | 1<<0 | 1<<1; } void MM_AD9850_SetFreq(unsigned int frequency) { int n=0; // frequency calc from datasheet page 8 =* /2^32 // AD9850 has 125Mhz clock frequency = (frequency * 4294967296) / 125000000; for (n=0; n<32; n++) { // set data pin (2) to 1 or 0 if ((frequency & 0x1) == 1) { // set data pin (2) to 1 GPIOA->BSRR = 1<<2; } else { // set data pin (2) to 0 GPIOA->BRR = 1<<2; } // W_CLK pulse, so AD9850 can shift data in register GPIOA->BSRR = 1<<0; GPIOA->BRR = 1<<0; // shift one bit... frequency>>=1; } // all 0 for ad9850 GPIOA->BRR = 1<<2; for (n=0; n<8; n++) { // W_CLK pulse, so AD9850 can shift data in register GPIOA->BSRR = 1<<0; GPIOA->BRR = 1<<0; } // should be done GPIOA->BSRR = 1<<1; GPIOA->BRR = 1<<1; } int main(void) { ... ... ... MM_AD9850_Init(); MM_AD9850_SetFreq(10000000); ... ... ... }