Ubuntu16之STM32开发--点灯和串口通信

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weifengdq/article/details/84349286

简介

环境如下:

  • 硬件: NUCLEO-F767ZI 板
  • 初始配置: STM32CubeMX (HAL库)
  • IDE: TrueSTUDIO
  • 串口工具: CuteCOM

STM32CubeMX 和 TrueSTUDIO 的安装配置参考我的上篇文章: Ubuntu16配置STM32开发环境(STM32CubeMX和TrueSTUDIO)

初始配置

打开STM32CubeMX -> New Project -> 选择NUCLEO-F767, 开发板图片双击:
S1

弹出对话框选NO:
s2

OK:
S3

如下图所示:
s4

默认的LD2(蓝灯)和LD3(红灯)引脚已变绿, 不予理会.
SYS 的 Debug 选 Serial Wire, SWD两线调试, 此时 PA13和PA14会变绿.
RCC 的 High Speed Clock(HSE) 选 BYPASS Clock Source, 时钟是板载ST-Link V2_1来的MCO 8MHz. 此时PH0, PH1变绿.
USART3 的 Mode 选 Asynchromous(异步), PD8, PD9变绿, 该串口连到ST-Link V2_1的串口(会把数据转发到ST-Link USB虚拟串口, Ubuntu识别为 /dev/ttyACM0).

然后配置时钟, 点击Clock COnfiguration选项卡:
S5

System Clock Mux 选择PLLCLK.
HSE的Input frequency填8, 对应上面MCO的8M.
HCLK(MHz)填216, 回车, 会自动配置时钟.

Configuration选项卡中USART3默认已经115200-8-N-1, 不予修改.

菜单栏Project -> Setting -> Project选项卡:
s6

填入工程名, 选择工程放置的文件目录, IDE选择 TrueSTUDIO.

然后是Code Generator选项卡:
s7

都配置完后, Project -> Generate Code. 弹出:

s8

选 Open Project 时并不能像 Win10中那样会直接打开Keil, 这里会弹出浏览器, 大概是没有关联配置, 此处选Close即可.

TrueStudio

打开TrueSTUDIO(默认 /opt/Atollic_TrueSTUDIO_for_STM32_x86_64_9.1.0/ide 目录).
File -> Import -> General -> Existing Projects into Workspace -> Next, 选择上面STM32CubeMX生成的工程目录作为根目录:
s9

这样工程就就导入了.

uasrt.c 文件下面 /* USER CODE BEGIN 1 *//* USER CODE END 1 */ 之间填入如下代码用于在TrueSTUDIO中支持使用 printf :

/* USER CODE BEGIN 1 */
#ifdef __GNUC__
  /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
     set to 'Yes') calls __io_putchar() */
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
  * @brief  Retargets the C library printf function to the USART.
  * @param  None
  * @retval None
  */
PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xFFFF);

  return ch;
}

int _write(int file, char *ptr, int len)
{
      int DataIdx;
      for (DataIdx = 0; DataIdx < len;DataIdx++)
      {
           __io_putchar(*ptr++);
      }
      return len;
}
/* USER CODE END 1 */

main.c 中加入如下代码:

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
uint8_t count = 0;
uint8_t aRxBuffer3[1];
/* USER CODE END PFP */

  /* USER CODE BEGIN 2 */
  HAL_UART_Receive_IT(&huart3, (uint8_t *)aRxBuffer3, 1);
  /* USER CODE END 2 */

  while (1)
  {

  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
		++count;
		HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
		printf("Hello, %3d\r\n", count);
		HAL_Delay(100);
  }
  /* USER CODE END 3 */

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
	if(huart == &huart3) {
		__HAL_UART_CLEAR_PEFLAG(&huart3);
		HAL_UART_Receive_IT(&huart3, aRxBuffer3, 1);
		HAL_UART_Transmit(&huart3, aRxBuffer3, 1, 10);	//Echo
	}
}

/* USER CODE END 4 */

Run -> Debug Configurations:

s10

s11

工程的 elf文件保持默认不变即可, 然后点击Run -> Debug即可调试.

s13

Debug区域的elf文件右键可以停止调试… 右上角切换工作环境.
按F8或者图中右指向图标按钮即可运行程序, 开发板蓝灯闪烁, 打开CuteCom:

# sudo apt install cutecom
sudo chmod 777 /dev/ttyACM0
sudo cutecom

可以看到数据的打印:

s14

工程下载

https://download.csdn.net/download/weifengdq/10802433
https://github.com/weifengdq/ROS-STM32

猜你喜欢

转载自blog.csdn.net/weifengdq/article/details/84349286