简介
环境如下:
- 硬件: NUCLEO-F767ZI 板
- 初始配置: STM32CubeMX (HAL库)
- IDE: TrueSTUDIO
- 串口工具: CuteCOM
STM32CubeMX 和 TrueSTUDIO 的安装配置参考我的上篇文章: Ubuntu16配置STM32开发环境(STM32CubeMX和TrueSTUDIO)
初始配置
打开STM32CubeMX -> New Project -> 选择NUCLEO-F767, 开发板图片双击:
弹出对话框选NO:
OK:
如下图所示:
默认的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选项卡:
System Clock Mux 选择PLLCLK.
HSE的Input frequency填8, 对应上面MCO的8M.
HCLK(MHz)填216, 回车, 会自动配置时钟.
Configuration选项卡中USART3默认已经115200-8-N-1, 不予修改.
菜单栏Project -> Setting -> Project选项卡:
填入工程名, 选择工程放置的文件目录, IDE选择 TrueSTUDIO.
然后是Code Generator选项卡:
都配置完后, Project -> Generate Code. 弹出:
选 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生成的工程目录作为根目录:
这样工程就就导入了.
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:
工程的 elf文件保持默认不变即可, 然后点击Run -> Debug即可调试.
Debug区域的elf文件右键可以停止调试… 右上角切换工作环境.
按F8或者图中右指向图标按钮即可运行程序, 开发板蓝灯闪烁, 打开CuteCom:
# sudo apt install cutecom
sudo chmod 777 /dev/ttyACM0
sudo cutecom
可以看到数据的打印:
工程下载
https://download.csdn.net/download/weifengdq/10802433
https://github.com/weifengdq/ROS-STM32