I'm still beginner to programming STM32. I haven't been able to configure SPI for two weeks and don't understand what I am doing wrong. I dug up all the forums looking for an answer, but nothing helped to solve my problem. I checked the MOSI and SCK pin with an oscilloscope and there are no signals on these pins. I tried different ways to configure SPI but still nothing helped. Tried configuring for SPI1, SPI2, SPI3, SPI4, SPI5 etc, same problem. Everything works in HAL, but I want to understand what I am doing wrong using CMSIS. Please give me at least a little hint what I'm setting up wrong. I'm using STM32H743ZI debug board. I really hope for your help, thank you.
#include "main.h" #define cs_set() GPIOC->BSRR |= GPIO_BSRR_BR11; #define cs_reset() GPIOC->BSRR |= GPIO_BSRR_BS11; void SPIinit (void); void Settings7219 (void); void SPITransmit (uint8_t adress, uint8_t data); int main (void) { SPIinit(); Settings7219(); GPIOB->BSRR |= GPIO_BSRR_BS0; while(1){ } } void SPITransmit (uint8_t adress, uint8_t data) { SPI3->CR1 |= SPI_CR1_CSTART; uint8_t tx_buffer[1] = {0}; while (!(SPI3->SR & SPI_SR_TXP)); cs_set(); // SS enable tx_buffer[0] = adress; SPI3->TXDR = tx_buffer[0]; tx_buffer[0] = data; SPI3->TXDR = tx_buffer[0]; cs_reset(); // SS disable SPI3->CR1 &= ~SPI_CR1_CSTART; } void Settings7219 (void) { SPITransmit(0x09, 0x00); // no decoding SPITransmit(0x0a, 0x01); // brightness SPITransmit(0x0b, 0x07); // scan limit = 8 LEDs SPITransmit(0x0c, 0x01); // power down =0,normal mode = 1 SPITransmit(0x0f, 0x01); // no display test } /*__________________________SPI_Conf____________________*/ void SPIinit (void){ /*_______________________RCC_________________________*/ RCC->AHB4ENR |= RCC_AHB4ENR_GPIOCEN; RCC->AHB4ENR |= RCC_AHB4ENR_GPIOBEN; RCC->APB1LENR |= RCC_APB1LENR_SPI3EN; /*_______________________SET_MODE_____________________*/ GPIOC->MODER &= ~GPIO_MODER_MODE12; GPIOC->MODER &= ~GPIO_MODER_MODE11; GPIOC->MODER &= ~GPIO_MODER_MODE10; GPIOC->MODER |= GPIO_MODER_MODE12_1 | GPIO_MODER_MODE11_0 | GPIO_MODER_MODE10_1; GPIOB->MODER &= ~GPIO_MODER_MODE0; GPIOB->MODER |= GPIO_MODER_MODE0_0; /*_____________________SET_AF_________________________*/ GPIOC->AFR[1] |= GPIO_AFRH_AFSEL10_1 | GPIO_AFRH_AFSEL10_2; // MOSI GPIOC->AFR[1] |= GPIO_AFRH_AFSEL12_1 | GPIO_AFRH_AFSEL12_2; // SCK /*_____________________SET_SPI________________________*/ SPI3->CFG1 |= SPI_CFG1_MBR_1; //SPI3->CFG1 |= SPI_CFG1_CRCEN; //SPI3->CFG1 |= SPI_CFG1_FTHLV_0; SPI3->CFG2 |= SPI_CFG2_MASTER; SPI3->CFG2 |= SPI_CFG2_COMM_0; SPI3->CFG2 |= SPI_CFG2_CPOL; //SPI3->CFG2 |= SPI_CFG2_SSOE; //SPI3->CFG2 |= SPI_CFG2_SSM; //SPI3->CFG2 |= SPI_CFG2_SSOM; //SPI3->CR2 |= SPI_CR2_TSIZE; //SPI3->CR2 |= SPI_CR2_TSER; //SPI3->IER |= SPI_IER_TXPIE; //SPI3->CR1 |= SPI_CR1_SSI; //SPI3->IER |= SPI_IER_TXTFIE; SPI3->CR1 |= SPI_CR1_SPE; NVIC_EnableIRQ(SPI3_IRQn); }
What made you think that 'Infrastructure Solutions' was the appropriate forum for this?
Note that how to use ST's SPI implementation in their chips is a question for ST - nothing to do with Keil or ARM:
https://community.arm.com/developer/tools-software/tools/f/keil-forum/43684/lpc2148-timer0-not-working-as-expected/158950#158950
Have you checked out ST's site for documentation, examples, etc?
https://www.st.com/en/microcontrollers-microprocessors/stm32h743zi.html
https://community.st.com/s/topic/0TO0X000000BSqSWAW/stm32-mcus