导读:目前正在解读《使用变参函数实现STM32串口接收指定字符的功能(新版)》的相关信息,《使用变参函数实现STM32串口接收指定字符的功能(新版)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《使用变参函数实现STM32串口接收指定字符的功能(新版)》的详细说明。
简介:本文主要介绍了使用新版的四点改动之处,并用代码予以说明。

新版改动的地方有:

第一,不使用中断接收,而使用while来等待,因为本身函数的功能就是等待;

第二,去掉各种各样的全局数组;

第三,调用的函数指针更加简单;

第四,采用goto语句实现各种情形下的返回和收尾工作。

char UART_wait_spe_char(USART_TypeDef* USARTx, void (*fun)(void), int len, ...)

{

char byte = 0xFF, *p = (char *)&len + sizeof(len);

int i = 0;

uint8_t channel;

if (USARTx == USART1)

channel = USART1_IRQn;

else if (USARTx == USART2)

channel = USART2_IRQn;

else if (USARTx == USART3)

channel = USART3_IRQn;

else

return -1;

NVIC->ICER[channel >> 0x05] = (uint32_t)0x01 << (channel & (uint8_t)0x1F);

while (1) {

fun();

while (USART_GetITStatus(USARTx,USART_IT_RXNE) == RESET);

byte = USART_ReceiveData(USARTx);

uart_send_byte(USARTx, byte);

for (i = 0; i < len; i++) {

if (byte == *((char *)(p + i * sizeof(int))))

goto END;

}

}

END:

NVIC->ISER[channel >> 0x05] = (uint32_t)0x01 << (channel & (uint8_t)0x1F);

return byte;

}

使用时,先定义函数入口参数fun:

void uart1_wait_fun(void)

{

uart_printf(USART1, "rnPlease enter your choice (a/b/c/d): ");

}

然后在主函数中执行:

byte = UART_wait_spe_char(USART1, uart1_wait_fun, 4, 'a', 'b', 'c', 'd');

uart_printf(USART1, "rnControl the LED.rn");

在串口终端minicom就会显示:

Please enter your choice (a/b/c/d): F

Please enter your choice (a/b/c/d): D

Please enter your choice (a/b/c/d): a

Control the LED.

提醒:《使用变参函数实现STM32串口接收指定字符的功能(新版)》最后刷新时间 2024-03-14 01:08:44,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《使用变参函数实现STM32串口接收指定字符的功能(新版)》该内容的真实性请自行鉴别。