Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stm32f407xx.h"
- void RCC_init(void)
- {
- //HSE
- RCC->CR |= RCC_CR_HSEON;
- //flash
- FLASH->ACR |= FLASH_ACR_PRFTEN;
- FLASH->ACR |= FLASH_ACR_LATENCY_3WS;
- //pll
- RCC->PLLCFGR &= RCC_PLLCFGR_PLLM_4;
- RCC->PLLCFGR &= RCC_PLLCFGR_PLLN_6;
- RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE;
- RCC->PLLCFGR |= RCC_PLLCFGR_PLLM_2;
- RCC->PLLCFGR |= RCC_PLLCFGR_PLLN_3;
- RCC->PLLCFGR |= RCC_PLLCFGR_PLLN_5;
- RCC->PLLCFGR |= RCC_PLLCFGR_PLLN_7;
- RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
- RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
- RCC->CR |= RCC_CR_PLLON;
- //MCO
- RCC->CFGR |= RCC_CFGR_MCO1PRE_2;
- RCC->CFGR |= RCC_CFGR_MCO1_0;
- RCC->CFGR |= RCC_CFGR_MCO1_1;
- RCC->CFGR |= RCC_CFGR_SW_1;
- //GPIO
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
- //PERIPH
- RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
- RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
- }
- void GPIO_init(void)
- {
- GPIOA->MODER |= GPIO_MODER_MODE8_1;
- GPIOA->OSPEEDR |= GPIO_OSPEEDR_OSPEED8_0; //1 в 0-й бит скорости пина 8 MCO
- GPIOA->OSPEEDR |= GPIO_OSPEEDR_OSPEED8_1; //1 в 1-й бит скорости пина
- GPIOA->MODER |= GPIO_MODER_MODE9_1; //альтернативный режим для Tx пина usart1
- GPIOA->MODER |= GPIO_MODER_MODE10_1; //альтернативный режим для Rx пина usart1
- GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9_1;
- GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR10_1; //высокая скорость для Tx пина usart1
- GPIOA->AFR[1]|=0x770; //единичка в массиве указывает на AFRH, для ввода в AFRL нужен 0. 0x770 = 0111 0111 0000 на каждый пин 4 бита, 0111 на 10, 0111 на 9, 0000 на 8
- GPIOA->AFR[0]|=0x550000;
- // GPIOA->MODER |= GPIO_MODER_MODE6_1;
- // GPIOA->MODER |= GPIO_MODER_MODE4_1; //режим альтернативный
- GPIOA->MODER |= GPIO_MODER_MODE4_0;
- GPIOA->MODER |= GPIO_MODER_MODE5_1; //режим альтернативный
- GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6_1;
- GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5_1;
- GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR4_1;
- GPIOA->PUPDR |= GPIO_PUPDR_PUPD6_0; //режим pull-up
- }
- void usart1_init(void){
- USART1->CR1 |= USART_CR1_UE; //включение usart
- // USART1->CR1 |= USART_CR1_M; //длина слова 9 бит
- // скорости usart, высчитываются по fapb2/baudrate (84000000/9600или115200)
- // USART1->BRR = 8750; //9600 бод
- USART1->BRR |= 0x2D9; //=729 115200 бод
- USART1->CR1 |= USART_CR1_TE;
- USART1->CR1 |= USART_CR1_RE;
- }
- void spi1_init(void) {
- // SPI1->CR1 |= SPI_CR1_CPOL;
- SPI1->CR1 |= SPI_CR1_BR;
- SPI1->CR1 |= SPI_CR1_SSM;
- SPI1->CR1 |= SPI_CR1_SSI;
- SPI1->CR1 |= SPI_CR1_MSTR;
- SPI1->CR1 |= SPI_CR1_DFF;
- SPI1->CR1 |= SPI_CR1_SPE;
- }
- int main(void)
- {
- RCC_init();
- GPIO_init();
- usart1_init();
- spi1_init();
- int data[0];
- SPI1->DR = 0;
- while(!(SPI1->SR, SPI_SR_RXNE)){};
- data[0] = SPI1->DR;
- while ((USART1->SR & USART_SR_TXE) == 0) {}
- USART1->DR = data[0];
- // while(1){
- // GPIOA->BSRR |= GPIO_BSRR_BS_5;
- // GPIOA->BSRR |= GPIO_BSRR_BR_5;
- // while ((USART1->SR & USART_SR_RXNE) == 0) {} //ничего не делает, пока не получит данные
- // uint8_t echo = USART1->DR ; //
- // while ((USART1->SR & USART_SR_TXE) == 0) {} // ничего не делает пока DR не станет пустым. TXE становится 1 когда DR передастся.
- // USART1->DR = echo;
- // }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement