Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stm32f10x.h"
- #include "serial.h"
- /* Private variables ---------------------------------------------------------*/
- unsigned char buffer_rx[64];
- unsigned char buffer_rx_len;
- unsigned char serial_enable;
- /* unbuffered USART write */
- void serial_putchar (unsigned char c)
- {
- while (!(USART1->SR & USART_FLAG_TXE));
- USART_SendData (USART1, c);
- }
- void serial_send (char *s)
- {
- while (*s)
- serial_putchar (*s ++);
- }
- void serial_send_len (char *s, unsigned short l)
- {
- unsigned short i;
- for (i = 0; i < l; i ++)
- serial_putchar (s[i]);
- }
- unsigned char serial_available ()
- {
- return buffer_rx_len ? 1 : 0;
- }
- unsigned char serial_getchar ()
- {
- if (buffer_rx_len > 0)
- return buffer_rx[-- buffer_rx_len];
- return 0;
- }
- /**
- * @brief This function handles USART1 global interrupt request.
- * @param None
- * @retval None
- */
- void USART1_IRQHandler (void)
- {
- if (USART_GetITStatus (USART1, USART_IT_RXNE) != RESET) {
- /* Read one byte from the receive data register */
- if (buffer_rx_len < sizeof (buffer_rx))
- buffer_rx[buffer_rx_len ++] = USART_ReceiveData (USART1);
- }
- }
- /**
- * @brief Configure the USART interface
- * @param baudrate Assign baudrate
- * @retval None
- */
- static void usart_conf (unsigned short baudrate)
- {
- USART_InitTypeDef usart;
- /* USART1 configured as follow:
- - BaudRate = 115200 baud
- - Word Length = 8 Bits
- - One Stop Bit
- - No parity
- - Hardware flow control disabled (RTS and CTS signals)
- - Receive and transmit enabled
- */
- usart.USART_BaudRate = baudrate;
- usart.USART_WordLength = USART_WordLength_8b;
- usart.USART_StopBits = USART_StopBits_1;
- usart.USART_Parity = USART_Parity_No;
- usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_Init (USART1, &usart);
- /* Enable USARTy Receive and Transmit interrupts */
- USART_ITConfig (USART1, USART_IT_RXNE, ENABLE);
- USART_Cmd (USART1, ENABLE);
- buffer_rx_len = 0;
- }
- /**
- * @brief Configure the used I/O ports pin
- * @param None
- * @retval None
- */
- static void gpio_conf (void)
- {
- /*GPIO_InitTypeDef *gpio = (GPIO_InitTypeDef *) mem_alloc (sizeof (GPIO_InitTypeDef));
- if (!gpio)
- return;*/
- NVIC_InitTypeDef NVIC_InitStructure;
- /* Configure the NVIC Preemption Priority Bits */
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- /* Enable the USARTy Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- GPIO_InitTypeDef gpio;
- /* Configure USART Rx as input floating */
- gpio.GPIO_Pin = GPIO_Pin_10;
- gpio.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init (GPIOA, &gpio);
- /* Configure USART1 Tx as alternate function push-pull */
- gpio.GPIO_Pin = GPIO_Pin_9;
- gpio.GPIO_Speed = GPIO_Speed_50MHz;
- gpio.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init (GPIOA, &gpio);
- }
- int serial_init ()
- {
- gpio_conf ();
- usart_conf (115200);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement