Advertisement
Guest User

Untitled

a guest
Feb 9th, 2012
442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.08 KB | None | 0 0
  1. #include "stm32f10x.h"
  2. #include "serial.h"
  3.  
  4. /* Private variables ---------------------------------------------------------*/
  5. unsigned char buffer_rx[64];
  6. unsigned char buffer_rx_len;
  7. unsigned char serial_enable;
  8.  
  9. /* unbuffered USART write */
  10. void serial_putchar (unsigned char c)
  11. {
  12. while (!(USART1->SR & USART_FLAG_TXE));
  13.  
  14. USART_SendData (USART1, c);
  15. }
  16.  
  17. void serial_send (char *s)
  18. {
  19. while (*s)
  20. serial_putchar (*s ++);
  21. }
  22.  
  23. void serial_send_len (char *s, unsigned short l)
  24. {
  25. unsigned short i;
  26. for (i = 0; i < l; i ++)
  27. serial_putchar (s[i]);
  28. }
  29.  
  30. unsigned char serial_available ()
  31. {
  32. return buffer_rx_len ? 1 : 0;
  33. }
  34.  
  35. unsigned char serial_getchar ()
  36. {
  37. if (buffer_rx_len > 0)
  38. return buffer_rx[-- buffer_rx_len];
  39.  
  40. return 0;
  41. }
  42.  
  43. /**
  44. * @brief This function handles USART1 global interrupt request.
  45. * @param None
  46. * @retval None
  47. */
  48. void USART1_IRQHandler (void)
  49. {
  50. if (USART_GetITStatus (USART1, USART_IT_RXNE) != RESET) {
  51. /* Read one byte from the receive data register */
  52. if (buffer_rx_len < sizeof (buffer_rx))
  53. buffer_rx[buffer_rx_len ++] = USART_ReceiveData (USART1);
  54. }
  55. }
  56.  
  57. /**
  58. * @brief Configure the USART interface
  59. * @param baudrate Assign baudrate
  60. * @retval None
  61. */
  62. static void usart_conf (unsigned short baudrate)
  63. {
  64. USART_InitTypeDef usart;
  65.  
  66. /* USART1 configured as follow:
  67. - BaudRate = 115200 baud
  68. - Word Length = 8 Bits
  69. - One Stop Bit
  70. - No parity
  71. - Hardware flow control disabled (RTS and CTS signals)
  72. - Receive and transmit enabled
  73. */
  74.  
  75. usart.USART_BaudRate = baudrate;
  76. usart.USART_WordLength = USART_WordLength_8b;
  77. usart.USART_StopBits = USART_StopBits_1;
  78. usart.USART_Parity = USART_Parity_No;
  79. usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  80. usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  81.  
  82. USART_Init (USART1, &usart);
  83.  
  84. /* Enable USARTy Receive and Transmit interrupts */
  85. USART_ITConfig (USART1, USART_IT_RXNE, ENABLE);
  86.  
  87. USART_Cmd (USART1, ENABLE);
  88.  
  89. buffer_rx_len = 0;
  90. }
  91.  
  92. /**
  93. * @brief Configure the used I/O ports pin
  94. * @param None
  95. * @retval None
  96. */
  97. static void gpio_conf (void)
  98. {
  99. /*GPIO_InitTypeDef *gpio = (GPIO_InitTypeDef *) mem_alloc (sizeof (GPIO_InitTypeDef));
  100.  
  101. if (!gpio)
  102. return;*/
  103.  
  104. NVIC_InitTypeDef NVIC_InitStructure;
  105.  
  106. /* Configure the NVIC Preemption Priority Bits */
  107. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  108.  
  109. /* Enable the USARTy Interrupt */
  110. NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  111. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  112. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  113. NVIC_Init(&NVIC_InitStructure);
  114.  
  115.  
  116. GPIO_InitTypeDef gpio;
  117.  
  118. /* Configure USART Rx as input floating */
  119. gpio.GPIO_Pin = GPIO_Pin_10;
  120. gpio.GPIO_Mode = GPIO_Mode_IPU;
  121.  
  122. GPIO_Init (GPIOA, &gpio);
  123.  
  124. /* Configure USART1 Tx as alternate function push-pull */
  125. gpio.GPIO_Pin = GPIO_Pin_9;
  126. gpio.GPIO_Speed = GPIO_Speed_50MHz;
  127. gpio.GPIO_Mode = GPIO_Mode_AF_PP;
  128.  
  129. GPIO_Init (GPIOA, &gpio);
  130. }
  131. int serial_init ()
  132. {
  133. gpio_conf ();
  134. usart_conf (115200);
  135.  
  136. return 0;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement