• volcanol的工控博客


      1 #include "stm32f10x.h"
      2 #include "serial.h"
      3 #include "rtthread.h"
      4 #include <rtdevice.h>
      5 /***********************************************************************************************************
      6 @   pin config  USART1_REMAP = 0                                                
      7 @____________________________________________________________________________*/
      8 
      9 #define UART1_GPIO_TX                           GPIO_Pin_9
     10 #define UART1_GPIO_RX                           GPIO_Pin_10
     11 #define UART1_GPIO                              GPIOA
     12 #define RCC_APBPeriph_UART1                 RCC_APB2Periph_USART1
     13 #define UART1_TX_DMA                            DMA1_Channel4
     14 #define UART1_RX_DMA                            DMA1_Channel5
     15 
     16 /***********************************************************************************************************
     17 @   Struct Definition   
     18 @____________________________________________________________________________*/
     19 struct serial_ringbuffer serial_int_rx_buffer;
     20 struct serial_ringbuffer serial_int_tx_buffer;
     21 struct rt_serial_device serialx_device;
     22 struct serial_user_data
     23 {
     24     USART_TypeDef* uart_device;
     25     const char name[RT_NAME_MAX];
     26 };
     27 
     28 
     29 
     30 /***********************************************************************************************************
     31 @   Hardware clock configuration
     32 @____________________________________________________________________________*/
     33 static void RCC_Configuration(void)
     34 {
     35     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
     36 
     37     /* Enable USART1 and GPIOA clocks */
     38     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
     39 
     40 }
     41 
     42 static void GPIO_Configuration(void)
     43 {
     44     GPIO_InitTypeDef GPIO_InitStructure;
     45 
     46     /* Configure USART1 Rx (PA.10) as input floating */
     47     GPIO_InitStructure.GPIO_Pin = UART1_GPIO_RX;
     48     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
     49     GPIO_Init(UART1_GPIO, &GPIO_InitStructure);
     50 
     51     /* Configure USART1 Tx (PA.09) as alternate function push-pull */
     52     GPIO_InitStructure.GPIO_Pin = UART1_GPIO_TX;
     53     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     54     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
     55     GPIO_Init(UART1_GPIO, &GPIO_InitStructure);
     56 
     57 }
     58 
     59 static void NVIC_Configuration(void)
     60 {
     61     NVIC_InitTypeDef NVIC_InitStructure;
     62 
     63     /* Enable the USART1 Interrupt */
     64     NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
     65     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
     66     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
     67     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
     68     NVIC_Init(&NVIC_InitStructure);
     69 
     70 
     71 }
     72 
     73 
     74 
     75 
     76 
     77 /***********************************************************************************************************
     78 @   model driven architecture interface
     79 @____________________________________________________________________________*/
     80  int serial_put_char(struct rt_serial_device *serial, char c)
     81  {
     82     USART_ClearFlag(USART1,USART_FLAG_TC);
     83     USART_SendData(USART1, (u8) c);
     84      while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
     85      return c;
     86  }
     87  
     88 int serial_get_char(struct rt_serial_device *serial)
     89  {  
     90     int  ch = -1;
     91     struct serial_user_data* user = (struct serial_user_data *)(serial->parent.user_data);
     92  
     93 
     94     if(USART_GetITStatus(user->uart_device, USART_IT_RXNE) != RESET)
     95     {
     96         /* interrupt mode receive */
     97         RT_ASSERT(serial->parent.flag & RT_DEVICE_FLAG_INT_RX);
     98 
     99         ch = USART_ReceiveData(user->uart_device);
    100         
    101         /* clear interrupt */
    102         USART_ClearITPendingBit(user->uart_device, USART_IT_RXNE);
    103     }
    104     return ch;
    105  }
    106 
    107  rt_err_t serial_control(struct rt_serial_device *serial, int cmd, void *arg)
    108  {
    109     u16     int_flag;                               //interrupt flag
    110     FunctionalState     NewState;
    111     struct serial_user_data *user = (struct serial_user_data *)serial->parent.user_data;
    112 
    113     switch(*(rt_uint32_t *)arg)
    114     {
    115         case RT_SERIAL_RX_INT:
    116         {
    117             int_flag = USART_IT_RXNE;
    118             break;
    119         }
    120         case RT_SERIAL_TX_INT:
    121         {
    122             int_flag = USART_IT_TC;
    123             break;
    124         }
    125         default :
    126         {
    127             break;
    128         }
    129     }
    130     
    131     switch(cmd)
    132     {
    133         case RT_DEVICE_CTRL_SET_INT:
    134         {
    135             NewState = ENABLE;
    136             break;
    137         }
    138         case RT_DEVICE_CTRL_CLR_INT:
    139         {
    140             NewState = DISABLE;
    141             break;
    142         }
    143         default:
    144         {
    145             break;
    146         }
    147     }
    148     USART_ITConfig(user->uart_device, int_flag, NewState);
    149  }
    150 
    151  rt_size_t serial_dma_transmit(struct rt_serial_device *serial, const char *buf, rt_size_t size)
    152  {
    153 
    154  }
    155 /***********************************************************************************************************
    156 @Struct declaration 
    157 @____________________________________________________________________________*/
    158 struct serial_configure   serial_config = 
    159 {
    160     115200,
    161     8,
    162     1,
    163     0,
    164     0,
    165     0,
    166     0
    167 };
    168 struct serial_user_data serial_user_struct= 
    169 {
    170     USART1,
    171     "usart1"
    172 };
    173 rt_err_t stm32_serial_config(struct rt_serial_device *serial, struct serial_configure *cfg);
    174 struct rt_uart_ops  serial_ops = 
    175 {
    176     stm32_serial_config,
    177     serial_control,
    178     serial_put_char,
    179     serial_get_char,
    180     serial_dma_transmit 
    181 };
    182 
    183 
    184 rt_err_t stm32_serial_config(struct rt_serial_device *serial, struct serial_configure *cfg)
    185 {
    186     USART_InitTypeDef       USART_InitStructure;
    187     USART_ClockInitTypeDef  USART_ClockInitStructure;
    188     struct serial_user_data* user = (struct serial_user_data *)serial->parent.user_data;
    189     
    190 
    191     RCC_Configuration();
    192 
    193     GPIO_Configuration();
    194 
    195     NVIC_Configuration();
    196 /*
    197     serial->config = serial_config;
    198     serial->int_rx = &serial_int_rx_buffer;
    199     serial->int_tx = &serial_int_tx_buffer;
    200     serial->ops = &serial_ops;
    201 */
    202     USART_InitStructure.USART_BaudRate      = 9600;
    203     USART_InitStructure.USART_WordLength    = USART_WordLength_8b;
    204     USART_InitStructure.USART_StopBits          = USART_StopBits_1;
    205     USART_InitStructure.USART_Parity                = USART_Parity_No;
    206     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    207     USART_InitStructure.USART_Mode              = USART_Mode_Rx | USART_Mode_Tx;
    208     USART_ClockInitStructure.USART_Clock        = USART_Clock_Disable;
    209     USART_ClockInitStructure.USART_CPOL         = USART_CPOL_Low;
    210     USART_ClockInitStructure.USART_CPHA         = USART_CPHA_2Edge;
    211     USART_ClockInitStructure.USART_LastBit  = USART_LastBit_Disable;
    212 
    213     USART_Init(user->uart_device, &USART_InitStructure);
    214     USART_ClockInit(user->uart_device, &USART_ClockInitStructure);  
    215          
    216 
    217 //  rt_hw_serial_register(serial, user->name,
    218 //  RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,
    219 //  user);
    220 
    221     /* enable interrupt */
    222     USART_ITConfig(user->uart_device, USART_IT_RXNE, ENABLE);
    223     
    224     return RT_EOK;
    225 }
    226 
    227 
    228 
    229 
    230 
    231 void rt_hw_usart2_init(void)
    232 {
    233  /* USART_InitTypeDef       USART_InitStructure;
    234     USART_ClockInitTypeDef  USART_ClockInitStructure;
    235     
    236     RCC_Configuration();
    237 
    238     GPIO_Configuration();
    239 
    240     NVIC_Configuration();
    241 */
    242     serialx_device.config = serial_config;
    243     serialx_device.int_rx = &serial_int_rx_buffer;
    244     serialx_device.int_tx = &serial_int_tx_buffer;
    245     serialx_device.ops = &serial_ops;
    246 /*
    247     USART_InitStructure.USART_BaudRate = 115200;
    248     USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    249     USART_InitStructure.USART_StopBits = USART_StopBits_1;
    250     USART_InitStructure.USART_Parity = USART_Parity_No;
    251     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    252     USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    253     USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
    254     USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
    255     USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
    256     USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
    257 
    258     USART_Init(serial_user_struct.uart_device, &USART_InitStructure);
    259     USART_ClockInit(serial_user_struct.uart_device, &USART_ClockInitStructure); 
    260      
    261 */
    262     rt_hw_serial_register(&serialx_device, serial_user_struct.name,
    263     RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,
    264     &serial_user_struct);
    265 
    266     /* enable interrupt */
    267     //USART_ITConfig(serial_user_struct.uart_device, USART_IT_RXNE, ENABLE);
    268     
    269     //stm32_serial_config(&serialx_device,&serial_config);
    270 }
    271  

    下面是第二份代码:

      1 #include "stm32f10x.h"
      2 #include "serial.h"
      3 #include "rtthread.h"
      4 #include <rtdevice.h>
      5 /***********************************************************************************************************
      6 @   pin config  USART1_REMAP = 0                                                
      7 @____________________________________________________________________________*/
      8 
      9 /* USART1_REMAP = 0 */
     10 #define UART1_GPIO_TX                   GPIO_Pin_9
     11 #define UART1_GPIO_RX                   GPIO_Pin_10
     12 #define UART1_GPIO                          GPIOA
     13 #define RCC_APBPeriph_UART1         RCC_APB2Periph_USART1
     14 #define USART1_TX_DMA                   DMA1_Channel4
     15 #define USART1_RX_DMA                   DMA1_Channel5
     16 
     17 #if defined(STM32F10X_LD) || defined(STM32F10X_MD) || defined(STM32F10X_CL)
     18 #define UART2_GPIO_TX                   GPIO_Pin_5
     19 #define UART2_GPIO_RX                   GPIO_Pin_6
     20 #define UART2_GPIO                      GPIOD
     21 #define RCC_APBPeriph_UART2         RCC_APB1Periph_USART2
     22 #else /* for STM32F10X_HD */
     23 /* USART2_REMAP = 0 */
     24 #define UART2_GPIO_TX                   GPIO_Pin_2
     25 #define UART2_GPIO_RX                   GPIO_Pin_3
     26 #define UART2_GPIO                          GPIOA
     27 #define RCC_APBPeriph_UART2     RCC_APB1Periph_USART2
     28 #define UART2_TX_DMA                        DMA1_Channel7
     29 #define UART2_RX_DMA                        DMA1_Channel6
     30 #endif
     31 
     32 /* USART3_REMAP[1:0] = 00 */
     33 #define UART3_GPIO_RX                   GPIO_Pin_11
     34 #define UART3_GPIO_TX                   GPIO_Pin_10
     35 #define UART3_GPIO                          GPIOB
     36 #define RCC_APBPeriph_UART3     RCC_APB1Periph_USART3
     37 #define UART3_TX_DMA                        DMA1_Channel2
     38 #define UART3_RX_DMA                        DMA1_Channel3
     39 
     40 /***********************************************************************************************************
     41 @   Struct Definition   
     42 @____________________________________________________________________________*/
     43 struct serial_user_data
     44 {
     45     USART_TypeDef* uart_device;
     46     const char name[RT_NAME_MAX];
     47 };
     48 
     49 
     50 
     51 /***********************************************************************************************************
     52 @   Hardware clock configuration
     53 @____________________________________________________________________________*/
     54 static void RCC_Configuration(void)
     55 {
     56     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
     57 
     58     /* Enable USART1 and GPIOA clocks */
     59     RCC_APB2PeriphClockCmd(RCC_APBPeriph_UART1 | RCC_APB2Periph_GPIOA, ENABLE);
     60 
     61     /* Enable AFIO and GPIOD clock */
     62     RCC_APB1PeriphClockCmd(RCC_APBPeriph_UART2, ENABLE);
     63 
     64 }
     65 
     66 static void GPIO_Configuration(void)
     67 {
     68     GPIO_InitTypeDef GPIO_InitStructure;
     69 
     70     /* Configure USART1 Rx (PA.10) as input floating */
     71     GPIO_InitStructure.GPIO_Pin = UART1_GPIO_RX;
     72     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
     73     GPIO_Init(UART1_GPIO, &GPIO_InitStructure);
     74 
     75     /* Configure USART1 Tx (PA.09) as alternate function push-pull */
     76     GPIO_InitStructure.GPIO_Pin = UART1_GPIO_TX;
     77     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     78     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
     79     GPIO_Init(UART1_GPIO, &GPIO_InitStructure);
     80 
     81     /* Configure USART2 Rx as input floating */
     82     GPIO_InitStructure.GPIO_Pin = UART2_GPIO_RX;
     83     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
     84     GPIO_Init(UART2_GPIO, &GPIO_InitStructure);
     85 
     86     /* Configure USART2 Tx as alternate function push-pull */
     87     GPIO_InitStructure.GPIO_Pin = UART2_GPIO_TX;
     88     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
     89     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     90     GPIO_Init(UART2_GPIO, &GPIO_InitStructure);
     91 
     92 }
     93 
     94 static void NVIC_Configuration(void)
     95 {
     96     NVIC_InitTypeDef NVIC_InitStructure;
     97 
     98     /* Enable the USART1 Interrupt */
     99     NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
    100     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;
    101     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    102     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    103     NVIC_Init(&NVIC_InitStructure);
    104 
    105     /* Enable the USART2 Interrupt */
    106     NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
    107     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    108     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    109     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    110     NVIC_Init(&NVIC_InitStructure);
    111 
    112 
    113 }
    114 
    115 static void DMA_Configuration(void)
    116 {
    117 #if defined (RT_USING_UART3)
    118     DMA_InitTypeDef DMA_InitStructure;
    119 
    120     /* fill init structure */
    121     DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    122     DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    123     DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    124     DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    125     DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
    126     DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
    127     DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    128 
    129     /* DMA1 Channel5 (triggered by USART3 Tx event) Config */
    130     DMA_DeInit(UART3_TX_DMA);
    131     DMA_InitStructure.DMA_PeripheralBaseAddr = USART3_DR_Base;
    132     DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
    133     /* As we will set them before DMA actually enabled, the DMA_MemoryBaseAddr
    134      * and DMA_BufferSize are meaningless. So just set them to proper values
    135      * which could make DMA_Init happy.
    136      */
    137     DMA_InitStructure.DMA_MemoryBaseAddr = (u32)0;
    138     DMA_InitStructure.DMA_BufferSize = 1;
    139     DMA_Init(UART3_TX_DMA, &DMA_InitStructure);
    140     DMA_ITConfig(UART3_TX_DMA, DMA_IT_TC | DMA_IT_TE, ENABLE);
    141     DMA_ClearFlag(DMA1_FLAG_TC2);
    142 #endif
    143 }
    144 
    145 
    146 
    147 
    148 /***********************************************************************************************************
    149 @   model driven architecture interface
    150 @____________________________________________________________________________*/
    151 rt_err_t stm32_serial_config(struct rt_serial_device *serial, struct serial_configure *cfg);
    152 
    153  int serial_put_char(struct rt_serial_device *serial, char c)
    154  {
    155     struct serial_user_data* user = (struct serial_user_data *)(serial->parent.user_data);
    156     
    157     USART_ClearFlag(user->uart_device,USART_FLAG_TC);
    158     USART_SendData(user->uart_device,  c);
    159      while (USART_GetFlagStatus(user->uart_device, USART_FLAG_TC) == RESET);
    160      
    161      return c;
    162  }
    163  
    164 int serial_get_char(struct rt_serial_device *serial)
    165  {  
    166     int  ch = -1;
    167     struct serial_user_data* user = (struct serial_user_data *)(serial->parent.user_data);
    168  
    169 
    170     if(USART_GetITStatus(user->uart_device, USART_IT_RXNE) != RESET)
    171     {
    172         /* interrupt mode receive */
    173         RT_ASSERT(serial->parent.flag & RT_DEVICE_FLAG_INT_RX);
    174 
    175         ch = USART_ReceiveData(user->uart_device);
    176         
    177         /* clear interrupt */
    178         USART_ClearITPendingBit(user->uart_device, USART_IT_RXNE);
    179     }
    180     return ch;
    181  }
    182 
    183  rt_err_t serial_control(struct rt_serial_device *serial, int cmd, void *arg)
    184  {
    185     FunctionalState     NewState;
    186      
    187     struct serial_user_data *user = (struct serial_user_data *)serial->parent.user_data;
    188 
    189     switch(cmd)
    190     {
    191         case RT_DEVICE_CTRL_SET_INT:
    192         {
    193             NewState = ENABLE;
    194             break;
    195         }
    196         case RT_DEVICE_CTRL_CLR_INT:
    197         {
    198             NewState = DISABLE;
    199             break;
    200         }
    201         default:
    202         {
    203             break;
    204         }
    205     }
    206     
    207     switch(*(rt_uint32_t *)arg)
    208     {
    209         case RT_SERIAL_RX_INT:
    210         {
    211             USART_ITConfig(user->uart_device, USART_IT_RXNE, NewState);
    212             break;
    213         }
    214         case RT_SERIAL_TX_INT:
    215         {
    216             USART_ITConfig(user->uart_device, USART_IT_TC, NewState);
    217             break;
    218         }
    219         default :
    220         {
    221             break;
    222         }
    223     }
    224     
    225     return RT_EOK;
    226  }
    227 
    228  rt_size_t serial_dma_transmit(struct rt_serial_device *serial, const char *buf, rt_size_t size)
    229  {
    230         return size;
    231  }
    232 
    233 rt_err_t stm32_serial_config(struct rt_serial_device *serial, struct serial_configure *cfg)
    234 {
    235     USART_InitTypeDef               USART_InitStructure;
    236     USART_ClockInitTypeDef      USART_ClockInitStructure;
    237     struct serial_user_data*        user = (struct serial_user_data *)serial->parent.user_data;
    238 
    239     
    240     RCC_Configuration();
    241     GPIO_Configuration();
    242     NVIC_Configuration();
    243     DMA_Configuration();
    244 
    245     USART_InitStructure.USART_BaudRate      = cfg->baud_rate;
    246     
    247     switch(cfg->data_bits)
    248     {
    249         case 8:
    250         {
    251             USART_InitStructure.USART_WordLength    = USART_WordLength_8b;
    252             break;
    253         }
    254         case 9:
    255         {
    256             USART_InitStructure.USART_WordLength    = USART_WordLength_9b;
    257             break;
    258         }
    259         default :
    260         {
    261 #ifndef RT_USING_FINSH
    262             rt_kprintf("data bit set error
    ");
    263 #endif
    264             break;
    265         }
    266     }
    267 
    268     switch(cfg->stop_bits)
    269     {
    270         case 1:
    271         {
    272             USART_InitStructure.USART_StopBits  = USART_StopBits_1;
    273             break;
    274         }
    275         case 2:
    276         {
    277             USART_InitStructure.USART_StopBits  = USART_StopBits_2;
    278             break;
    279         }
    280         case 3:
    281         {
    282             USART_InitStructure.USART_StopBits  = USART_StopBits_0_5;
    283             break;
    284         }
    285         case 4:
    286         {
    287             USART_InitStructure.USART_StopBits  = USART_StopBits_1_5;
    288             break;
    289         }
    290         default :
    291         {
    292 #ifndef RT_USING_FINSH
    293             rt_kprintf("stopbits bit set error
    ");
    294 #endif
    295             break;
    296         }
    297     }
    298 
    299     switch(cfg->parity)
    300     {
    301         case 0:
    302         {
    303             USART_InitStructure.USART_Parity    = USART_Parity_No;
    304             break;
    305         }
    306         case 1:
    307         {
    308             USART_InitStructure.USART_Parity    = USART_Parity_Odd;
    309             break;
    310         }
    311         case 2:
    312         {
    313             USART_InitStructure.USART_Parity    = USART_Parity_Even;
    314             break;
    315         }
    316         default :
    317         {
    318 #ifndef RT_USING_FINSH
    319             rt_kprintf("data bit set error
    ");
    320 #endif
    321             break;
    322         }
    323     }
    324     
    325     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    326     USART_InitStructure.USART_Mode              = USART_Mode_Rx | USART_Mode_Tx;
    327     USART_ClockInitStructure.USART_Clock        = USART_Clock_Disable;
    328     USART_ClockInitStructure.USART_CPOL         = USART_CPOL_Low;
    329     USART_ClockInitStructure.USART_CPHA         = USART_CPHA_2Edge;
    330     USART_ClockInitStructure.USART_LastBit  = USART_LastBit_Disable;
    331 
    332     USART_Init(user->uart_device, &USART_InitStructure);
    333     USART_ClockInit(user->uart_device, &USART_ClockInitStructure);  
    334 
    335     /* enable interrupt */
    336     USART_ITConfig(user->uart_device, USART_IT_RXNE, ENABLE);
    337 
    338     return RT_EOK;
    339 }
    340 
    341 
    342 /***********************************************************************************************************
    343 @serial private function
    344 @____________________________________________________________________________*/
    345 struct rt_uart_ops  serial_ops = 
    346 {
    347     stm32_serial_config,
    348     serial_control,
    349     serial_put_char,
    350     serial_get_char,
    351     serial_dma_transmit 
    352 };
    353 /***********************************************************************************************************
    354 @Struct declaration 
    355 @____________________________________________________________________________*/
    356 struct serial_configure   serial_config = 
    357 {
    358     115200,             //USART_BaudRate
    359     8,                          //USART_WordLength
    360     1,                          //USART_StopBits
    361     0,                          //USART_Parity
    362     0,                          //
    363     0,                          //
    364     0                           //
    365 };
    366 struct serial_user_data serial_user_struct = 
    367 {
    368     USART2,             //hardware device
    369     "uart2"             //device name
    370 };
    371 struct serial_ringbuffer serial_int_rx_buffer;
    372 struct serial_ringbuffer serial_int_tx_buffer;
    373 struct rt_serial_device serialx_device;
    374 
    375 void rt_hw_serialx_register(void)
    376 {
    377     serialx_device.config = serial_config;
    378     serialx_device.int_rx = &serial_int_rx_buffer;
    379     serialx_device.int_tx = &serial_int_tx_buffer;
    380     serialx_device.ops = &serial_ops;
    381 
    382     rt_hw_serial_register(&serialx_device, serial_user_struct.name,
    383     RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,
    384     &serial_user_struct);
    385 }
    386 
    387 
    388 
    389 
    390 
    391 
    392 
    393 
    394 struct serial_user_data serial_user_struct1 = 
    395 {
    396     USART1,             //hardware device
    397     "uart1"                 //device name
    398 };
    399 struct rt_serial_device serialx_device1;
    400 struct serial_ringbuffer serial_int_rx_buffer1;
    401 struct serial_ringbuffer serial_int_tx_buffer1;
    402 void rt_hw_serialx_register1(void)
    403 {
    404     serialx_device1.config = serial_config;
    405     serialx_device1.int_rx = &serial_int_rx_buffer1;
    406     serialx_device1.int_tx = &serial_int_tx_buffer1;
    407     serialx_device1.ops = &serial_ops;
    408 
    409     rt_hw_serial_register(&serialx_device1, serial_user_struct1.name,
    410     RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,
    411     &serial_user_struct1);
    412 }
    413 
    414 
    415 
    416 #ifdef RT_USING_FINSH
    417 #include <finsh.h>
    418 static rt_uint8_t led_inited = 0;
    419 void usarts2(char *str)
    420 {
    421     rt_device_t usart;
    422 
    423     usart = rt_device_find("uart2");
    424     rt_device_write(usart,0,str,20);
    425 }
    426 FINSH_FUNCTION_EXPORT(usarts2,str)
    427 #endif
    428 
    429 
    430  
  • 相关阅读:
    ls 按大小排序 按时间排序
    【u035】奶牛的电信
    【record】#10
    【record】10.30..11.6
    【33.33%】【codeforces 608C】Chain Reaction
    【44.19%】【codeforces 608D】Zuma
    【22.73%】【codeforces 606D】Lazy Student
    【27.40%】【codeforces 599D】Spongebob and Squares
    【26.67%】【codeforces 596C】Wilbur and Points
    【13.91%】【codeforces 593D】Happy Tree Party
  • 原文地址:https://www.cnblogs.com/volcanol/p/6962221.html
Copyright © 2020-2023  润新知