中科因仑“3+1”工程特种兵精英论坛

标题: STM32 F103基础学习笔记06(串口通讯 RS232 485) [打印本页]

作者: 脑经急转弯    时间: 2016-5-7 22:08
标题: STM32 F103基础学习笔记06(串口通讯 RS232 485)
********************
众想STM32 串口通讯 RS232

********************




入门还是靠 众想科技 的STM32 视频。再看了 其他视频之后(质量普遍低,基本没看完),可以更加确认,众想STM32 视频 更适合初学者,但是 开发板 外观看起来 一般。

最近又回头复习了一下 C51,发现同样的外设,达到同样理解程度,用 C51 学习 至少省 一半的精力。 换句话话,学 STM32 同时,同时学习外设, 属于 难难联合。

*********************************

不过, uart 在 C51 通过寄存器操作,而 在 STM32 中通过 库函数 则 好像 更简单。

比如 96 N 8 1 设置,
  • 通过函数配置很简单
  •         USART_InitStructure.USART_BaudRate=9600;
  •         USART_InitStructure.USART_WordLength=USART_WordLength_8b;
  •         USART_InitStructure.USART_StopBits=USART_StopBits_1;
  •         USART_InitStructure.USART_Parity=USART_Parity_No;
  •         USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

[color=rgb(51, 102, 153) !important]复制代码


核心内容是在 串口中断 中配置

  • void USART1_IRQHandler(void)
  • {
  •    if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
  •    {
  •                 USART_SendData(USART1,USART_ReceiveData(USART1));
  •                 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
  •    }
  • }

[color=rgb(51, 102, 153) !important]复制代码


这个例子还是非常 简单 清晰的

  • int main(void)
  • {
  •    RCC_Configuration();        //系统时钟初始化
  •    GPIO_Configuration();//端口初始化
  •    USART_Configuration();
  •    NVIC_Configuration();
  •    while(1);
  • }

[color=rgb(51, 102, 153) !important]复制代码


也可以借助 STM32CUBEMX 来辅助生产代码



  • void MX_GPIO_Init(void)
  • {
  •   GPIO_InitTypeDef GPIO_InitStruct;
  •   /** USART1 GPIO Configuration
  •   PA9   ------> USART1_TX
  •   PA10   ------> USART1_RX
  •   */
  •   /*Enable or disable APB2 peripheral clock */
  •   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  •   /*Configure GPIO pin : PA */
  •   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
  •   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
  •   GPIO_Init(GPIOA, &GPIO_InitStruct);
  • }

[color=rgb(51, 102, 153) !important]复制代码


代码没有 设置 输出 和输入 模式,

TX 复用 推挽输出,RX 悬空输入。
  •         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX
  •         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  •         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  •         GPIO_Init(GPIOA,&GPIO_InitStructure);
  •         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX
  •         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  •         GPIO_Init(GPIOA,&GPIO_InitStructure);

[color=rgb(51, 102, 153) !important]复制代码


*****************************

在 uart 设置上, STM32 相对还是容易的。





欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4