Advertisement
Guest User

stm32

a guest
Mar 10th, 2023
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.41 KB | Source Code | 0 0
  1. #include "stm32f407xx.h"
  2. void RCC_init(void)
  3. {
  4. //HSE
  5. RCC->CR |= RCC_CR_HSEON;
  6. //flash
  7. FLASH->ACR |= FLASH_ACR_PRFTEN;
  8. FLASH->ACR |= FLASH_ACR_LATENCY_3WS;
  9. //pll
  10. RCC->PLLCFGR &= RCC_PLLCFGR_PLLM_4;
  11. RCC->PLLCFGR &= RCC_PLLCFGR_PLLN_6;
  12. RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE;
  13. RCC->PLLCFGR |= RCC_PLLCFGR_PLLM_2;
  14. RCC->PLLCFGR |= RCC_PLLCFGR_PLLN_3;
  15. RCC->PLLCFGR |= RCC_PLLCFGR_PLLN_5;
  16. RCC->PLLCFGR |= RCC_PLLCFGR_PLLN_7;
  17. RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
  18. RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
  19. RCC->CR |= RCC_CR_PLLON;
  20. //MCO
  21. RCC->CFGR |= RCC_CFGR_MCO1PRE_2;
  22. RCC->CFGR |= RCC_CFGR_MCO1_0;
  23. RCC->CFGR |= RCC_CFGR_MCO1_1;
  24. RCC->CFGR |= RCC_CFGR_SW_1;
  25. //GPIO
  26. RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
  27. //PERIPH
  28. RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
  29. RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
  30. }
  31. void GPIO_init(void)
  32. {
  33. GPIOA->MODER |= GPIO_MODER_MODE8_1;
  34. GPIOA->OSPEEDR |= GPIO_OSPEEDR_OSPEED8_0; //1 в 0-й бит скорости пина 8 MCO
  35. GPIOA->OSPEEDR |= GPIO_OSPEEDR_OSPEED8_1; //1 в 1-й бит скорости пина
  36. GPIOA->MODER |= GPIO_MODER_MODE9_1; //альтернативный режим для Tx пина usart1
  37. GPIOA->MODER |= GPIO_MODER_MODE10_1; //альтернативный режим для Rx пина usart1
  38. GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9_1;
  39. GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR10_1; //высокая скорость для Tx пина usart1
  40. GPIOA->AFR[1]|=0x770; //единичка в массиве указывает на AFRH, для ввода в AFRL нужен 0. 0x770 = 0111 0111 0000 на каждый пин 4 бита, 0111 на 10, 0111 на 9, 0000 на 8
  41. GPIOA->AFR[0]|=0x550000;
  42. // GPIOA->MODER |= GPIO_MODER_MODE6_1;
  43. // GPIOA->MODER |= GPIO_MODER_MODE4_1; //режим альтернативный
  44. GPIOA->MODER |= GPIO_MODER_MODE4_0;
  45. GPIOA->MODER |= GPIO_MODER_MODE5_1; //режим альтернативный
  46. GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6_1;
  47. GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5_1;
  48. GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR4_1;
  49. GPIOA->PUPDR |= GPIO_PUPDR_PUPD6_0; //режим pull-up
  50. }
  51. void usart1_init(void){
  52. USART1->CR1 |= USART_CR1_UE; //включение usart
  53. // USART1->CR1 |= USART_CR1_M; //длина слова 9 бит
  54. // скорости usart, высчитываются по fapb2/baudrate (84000000/9600или115200)
  55. // USART1->BRR = 8750; //9600 бод
  56. USART1->BRR |= 0x2D9; //=729 115200 бод
  57. USART1->CR1 |= USART_CR1_TE;
  58. USART1->CR1 |= USART_CR1_RE;
  59.  
  60.  
  61. }
  62. void spi1_init(void) {
  63.  
  64. // SPI1->CR1 |= SPI_CR1_CPOL;
  65. SPI1->CR1 |= SPI_CR1_BR;
  66. SPI1->CR1 |= SPI_CR1_SSM;
  67. SPI1->CR1 |= SPI_CR1_SSI;
  68. SPI1->CR1 |= SPI_CR1_MSTR;
  69. SPI1->CR1 |= SPI_CR1_DFF;
  70. SPI1->CR1 |= SPI_CR1_SPE;
  71. }
  72. int main(void)
  73. {
  74. RCC_init();
  75. GPIO_init();
  76. usart1_init();
  77. spi1_init();
  78. int data[0];
  79. SPI1->DR = 0;
  80. while(!(SPI1->SR, SPI_SR_RXNE)){};
  81. data[0] = SPI1->DR;
  82. while ((USART1->SR & USART_SR_TXE) == 0) {}
  83. USART1->DR = data[0];
  84. // while(1){
  85. // GPIOA->BSRR |= GPIO_BSRR_BS_5;
  86. // GPIOA->BSRR |= GPIO_BSRR_BR_5;
  87. // while ((USART1->SR & USART_SR_RXNE) == 0) {} //ничего не делает, пока не получит данные
  88. // uint8_t echo = USART1->DR ; //
  89. // while ((USART1->SR & USART_SR_TXE) == 0) {} // ничего не делает пока DR не станет пустым. TXE становится 1 когда DR передастся.
  90. // USART1->DR = echo;
  91.  
  92. // }
  93.  
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement