首页 > 编程知识 正文

串口线有哪几种,嵌入式系统的四个组成部分

时间:2023-05-06 00:04:53 阅读:174098 作者:2271

另一方面,通过串行端口发送数据(这种数据是指需要输出的汉字、数字等,可以用作书写一个项目的条件和标题) )。

实验现象:将程序中需要输出的值发送到上位机进行显示。

完成步骤:

1 )配置相应串行端口的GPIO端口;

2 )配置对应的串口结构,调用固件库中的单独函数

3 )重写输出stdio.h的printf ) )函数;

4 )在串行头文件中声明配置的GPIO、结构和个别函数;

5 )在main.c中可以直接调用printf ) )函数输出想要输出的数据,一般可以满足所有的输出。

具体步骤如下:

1 )1) ) )。

static void Usart_GPIO_Config ()

{

RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ gpioa,ENABLE );

gpio _ inittypedefgpio _ init struct;

gpio _ init struct.gpio _ pin=gpio _ pin _ 10;

gpio _ init struct.gpio _ speed=gpio _ speed _ 50m Hz;

gpio _ init struct.gpio _ mode=gpio _ mode _ in _ floating;

Gpio_init(gpioa,GPIO_InitStruct );

gpio _ init struct.gpio _ pin=gpio _ pin _ 9;

gpio _ init struct.gpio _ speed=gpio _ speed _ 50m Hz;

gpio _ init struct.gpio _ mode=gpio _ mode _ af _ PP;

Gpio_init(gpioa,GPIO_InitStruct );

}

2 )

static void Usart_ConFig (

{

RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ usar t1,ENABLE );

usart _ inittypedefusart _ init struct;

usart _ init struct.usart _ baudrate=115200;

usart _ hardware flow control=usart _ hardware flow control _ none;

usart _ init struct.usart _ mode=usart _ mode _ rx|usart _ mode _ tx;

usart _ init struct.usart _ parity=usart _ parity _ no;

usart _ init struct.usart _ stop bits=usart _ stop bits _ 1;

usart _ init struct.usart _ word length=usart _ word length _ 8b;

usart_cmd(debug_usartx,ENABLE );

}

3 )3) )。

重定向//c将库函数打印到串行端口。 重定向后可以使用printf函数

intfputc(intch,FILE f ) )。

{

/向串行端口发送1字节数据*

usart_senddata(debug_usartx,(uint8_t ) ch );

/*等待发送完成*

while (usart _ getflagstatus (debug _ usartx,USART_FLAG_TXE )==RESET );

返回(ch );

}

4 )4) ) )。

语音用户(语音)。

{

Usart_GPIO_Config (;

Usart_ConFig (;

}

5 ) ) )。

USART (;

printf (“串行端口printf函数测试n”);

二.使用中断接收信息

实现现象:上位机向单片机发送信息,单片机接收信息,并向上位机反馈信息。

完成步骤:

1 )配置相应串行端口的GPIO端口;

2 )配置对应的串口结构,调用固件库中的单独函数

3 )重写输出stdio.h的printf ) )函数;

4 )设置中断优先级

4 )在串行头文件中声明配置的GPIO、结构和个别函数;

5 )编写中断服务函数

6 )在main.c中调用声明函数。

具体步骤如下:

1 )1) ) )。

static void Usart_GPIO_Config ()

{

RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ gpioa,ENABLE );

gpio _ inittypedefgpio _ init struct;

gpio _ init struct.gpio _ pin=gpio _ pin _ 10;

gpio _ init struct.gpio _ speed=gpio _ speed _ 50m Hz;

gpio _ init struct.gpio _ mode=gpio _ mode _ in _ floating;

GPIO_Init (

GPIOA,&GPIO_InitStruct);

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStruct);
}
2)
static void Usart_ConFig()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

USART_InitTypeDef USART_InitStruct;
USART_InitStruct.USART_BaudRate=115200;
USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStruct.USART_Parity=USART_Parity_No;
USART_InitStruct.USART_StopBits=USART_StopBits_1;
USART_InitStruct.USART_WordLength=USART_WordLength_8b ;

USART_Init(DEBUG_USARTx,&USART_InitStruct);
// 串口中断优先级配置
NVIC_Configuration();

// 使能串口接收中断
USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);
USART_Cmd(DEBUG_USARTx,ENABLE);
}
3)
//重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE f)
{
/ 发送一个字节数据到串口 */
USART_SendData(DEBUG_USARTx, (uint8_t) ch);

/* 等待发送完毕 */
while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);

return (ch);
}
4)
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

/* 嵌套向量中断控制器组选择 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

/* 配置USART为中断源 /
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
/ 抢断优先级*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/* 子优先级 /
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
/ 使能中断 /
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/ 初始化配置NVIC */
NVIC_Init(&NVIC_InitStructure);
}
5)
void USART1_IRQHandler(void)
{

if(USART_GetITStatus(DEBUG_USARTx, USART_IT_RXNE)!=RESET)
{
tcmp=USART_ReceiveData(DEBUG_USARTx);
USART_SendData(DEBUG_USARTx, tcmp);
}
USART_ClearITPendingBit(DEBUG_USARTx, USART_IT_RXNE);
}
6)通过返回的值可以做一些功能控制,通过switch()来进行选择。

注:当然也可以不使用中断,直接重新书写getchar()函数,便可以直接接收从上位机发送的数据。(该方法只能以字符的形式输出,不能显示汉字,通过中断便可以显示汉字)

三、使用串口来改变程序中的变量
实现现象:通过串口能成功修改程序中的变量,并将修改后的变量传送回串口显示。

完成步骤:
1) 引入usmart与system组件,添加头文件路径;
2) 在usmart_config.c中添加需要修改变量的函数所在的头文件;
3) 对需要修改变量的函数进行注册;
4) 在main.c中添加两个组件中usmart.h与usart.h头文件;
5) 在main.c函数主函数中进行调用;

具体实现程序如下:
1)

2)

3)

4)

5)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。