获取串口号
时间:2022-05-03 16:58 | 分类: 句子大全 | 作者:漂流的时间 | 评论: 次 | 点击: 次
获取串口号
1. 用C#怎么读取串口号
private System.IO.Ports.SerialPort com;
private void Form1_Load(object sender, EventArgs e)
{
com = new System.IO.Ports.SerialPort();
//获取所有的串口
Microsoft.VisualBasic.Devices.Computer pc = new Microsoft.VisualBasic.Devices.Computer();
foreach (string s in pc.Ports.SerialPortNames)
{
this.cbxPortName.Items.Add(s);
}
}
也可以
RegistryKey hklm = Registry.LocalMachine;
RegistryKey HARDWARE = hklm.OpenSubKey("HARDWARE");
RegistryKey DEVICEMAP = HARDWARE.OpenSubKey("DEVICEMAP");
RegistryKey SERIALCOMM = DEVICEMAP.OpenSubKey("SERIALCOMM");
string[] s = SERIALCOMM.GetValueNames();
2. win7 64位系统怎么查看串口号
1、双击桌面上的“计算机”图标,打开”计算机“页面如下所示。
2、然后选择”系统属性“,如下图所示。
3、当然也可以直接在桌面上右击”计算机“,选择”属性“这一项。
4、在打开的系统属性页面,选择”设备管理器“这一项。
5、弹出设备管理器后,可以看到”端口(COM和LPT)“这一项,如下图所示。
6、单击端口这一选项后会显示当前的串口列表,这里显示了所有串口的信息,如果不知道具体是哪一个的话,可以插拔一下串口,有反应的那一个就是你需要的了。台式机上串口默认是COM1的。
3. 怎样查看连接电子显示屏所用的串口号
在使用电脑串号连接LED电子显示屏对显示屏进行设置或变更内容时,我们需要知道电脑连接显示屏所用的串口编号是多少。
在这里我们就Windows XP系统中串口号应该如何查看做一个介绍。 1、在“我的电脑”上单击鼠标右键查看“属性”; 2、在弹出对话框中选择“硬件”选项卡,点击按钮“设备管理器”; 3、这里你会看到“端口”,点开“端口”前面的“+”你做看到电脑上所有的端口。
台式电脑一般有“通讯端口(com#)”,如果有打印机的话会有“打印机端口(com#)”,另外部分显示屏使用“USB转串口线”和电脑连接,这样的话会有一个“USB-*****(com#)”。这里的“#”号就是我们所要知道的“串口号”。
4. Windows7系统怎么查看串口号
1、双击桌面上的“计算机”图标,打开”计算机“。
2、然后选择”系统属性“。
3、当然也可以直接在桌面上右击”计算机“,选择”属性“这一项。
4、在打开的系统属性页面,选择”设备管理器“这一项。
5、弹出设备管理器后,可以看到”端口(COM和LPT)“这一项。
6、单击端口这一选项后会显示当前的串口列表,这里显示了所有串口的信息,如果不知道具体是哪一个的话,可以插拔一下串口,有反应的那一个就是你需要的了。台式机上串口默认是COM1的。
基于标准库STM32单片机中的串口使用
一、STM32标准库串口驱动
相对于其他通信,串口通信还是比较简单的。对于单片机来说,就是有2个管脚,一个是tx ,一个为rx 。但只有这2个管脚是不能够来通信的,需要进行必要的寄存器配置,使能串口功能。然后才可以进行通信操作。
stm32f407这款单片机中有6个串口可供使用。
相关的驱动代码:
管理gpio初始化
GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(uart_gpio->gpio_uart_clock,ENABLE); GPIO_PinAFConfig(uart_gpio->gpio_group,uart_gpio->gpio_pin_source_rx,uart_gpio->gpio_af_uart); GPIO_PinAFConfig(uart_gpio->gpio_group,uart_gpio->gpio_pin_source_tx,uart_gpio->gpio_af_uart);GPIO_InitStructure.GPIO_Pin = uart_gpio->gpio_rx | uart_gpio->gpio_tx;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(uart_gpio->gpio_group,&GPIO_InitStructure);
中断nvic配置:
NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=uart_nvic->uart_irq_channel ;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=uart_nvic->uart_irq_pp; NVIC_InitStructure.NVIC_IRQChannelSubPriority=uart_nvic->uart_irq_subp;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);
串口参数配置功能:
USART_InitStructure.USART_BaudRate = uart_config->baudrate;USART_InitStructure.USART_WordLength = uart_config->uart_word_length;USART_InitStructure.USART_StopBits = uart_config->uart_stop_bits;USART_InitStructure.USART_Parity = uart_config->uart_parity;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(uart_config->uart, &USART_InitStructure);
因为stm32中有多个串口可以使用,方便代码重用,所以将一些参数利用结构体做成一个数据结构,统一配置。
相关的结构体配置代码如下:
typedef struct{uint8_t uart_irq_channel; //串口中断号uint8_t uart_irq_pp; //中断优先级,主优先级uint8_t uart_irq_subp; //中断优先级,子优先级}uart_nvic_t;typedef struct{uint32_t gpio_uart_clock; //串口GPIO时钟GPIO_TypeDef* gpio_group; //所属组uint16_t gpio_tx; //收发数据口uint16_t gpio_rx;uint8_t gpio_pin_source_tx; //复用收发配置uint8_t gpio_pin_source_rx;uint8_t gpio_af_uart; //gpio uart复用}uart_gpio_t;typedef struct{USART_TypeDef * uart; uint32_t uart_clock; //串口时钟uint32_t baudrate; //波特率uint16_t uart_word_length; //数据长度 uint16_t uart_stop_bits; //停止位 uint16_t uart_parity; //校验}uart_config_t;typedef struct{uint32_t dma_clock;DMA_Stream_TypeDef * tx_stream_type;uint32_t tx_dma_channel;uint32_t tx_dma_peripheral_base_addr;uint32_t tx_memory_base_addr;uint32_t tx_dma_idr;uint32_t tx_buffer_size;uint8_t * tx_buffer; //指向发送数据缓冲区DMA_Stream_TypeDef * rx_stream_type;uint32_t rx_dma_channel;uint32_t rx_dma_peripheral_base_addr;uint32_t rx_memory_base_addr;uint32_t rx_dma_idr;uint32_t rx_buffer_size;}uart_dma_t;
二、利用中断进行数据读取
例如:利用串口1中断来读取串口数据
void USART1_IRQHandler(void){if(USART_GetITStatus(debug_uart_config.uart, USART_IT_RXNE) != RESET) //判断发生接收中断 {uint8_t recv = USART_ReceiveData(debug_uart_config.uart)&0xFF; //USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除中断标志ring_buffer_2048_write_char(&usart1_ring_buffer,recv);if(recv==0x0D){recv0d=1;}if(recv == 0x0A && recv0d==1){recv0d=0;recv_comp= 1;}//debug_data(recv);}if(USART_GetITStatus(debug_uart_config.uart, USART_IT_TXE) != RESET) { USART_ITConfig(debug_uart_config.uart, USART_IT_TXE, DISABLE); }}
首先判断是否发生接收中断,如果是接收中断则读取一个字符,将读取到的字符写入到循环缓冲区中。
上述代码中,做拉“\r\n”作为结束标识的判断。当接收数据以“\r\n”时,说明已经接收完成,就可以进行数据的操作拉。
三、串口数据的发送
串口配置完成后,就可以进行数据发送。
相关代码如下所示:
void uart_send_data(USART_TypeDef* uart,uint8_t data){ USART_SendData(uart, data); //向串口发送数据while(USART_GetFlagStatus(uart,USART_FLAG_TC)!=SET);//等待发送结束}
串口接收数据图:
- 上一篇:佛曰警句
- 下一篇:失恋伤害的句子说说心情