目录
一、使用STM32cubemx生成keil工程
1.1、下载STM32cubemx
可以去官网注册然后下载: https://www.java.com/en/download/manual.jsp
详细步骤参考:(53条消息) 【STM32】STM32 CubeMx使用教程一--安装教程_Z小旋-CSDN博客_stm32cubemx安装
最好下载最新版本的,然后下载需要的芯片,本次我下载的是stm32f1
1.2、创建新工程
打开安装好的stm32cubemx,创建一个新工程
选择刚刚自己下载的芯片,然后双击右下方的Board就可以出现芯片了:
1.3、初始化配置
开始对芯片的管脚和时钟进行初始化配置,管脚可以根据自己的需求选择,这里选择的
PA4\PA5\PA6:(如图所示,PA5\PA6同PA4一样操作)
然后配置时钟,选择晶振:
然后将时钟树中间的8mhz改成72mhz并回车:(回车之后弹出的东西直接选ok)
配置完成后:
注意:配置完成后可以关注一下如下图所示的地方,如果是绿色则表示没有问题如果是黄色(警告)或者红色(错误)就需要重新配置调整。
1.4、工程导出
在project Manager中写出需要的工程名和保存的地址,还有配置其他内容:
然后点击 GENERATE CODE 导出工程,生成keil工程:
二、keil中完善和仿真
2.1完善功能
找到当时在stm32cubemx中保存的路径,找到keil文件然后打开它,可以看见工程中已经有很多文件了:
找到gpio.c和main.c并点开浏览一下,然后在main函数中的while中添加如下代码:
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//A0灯亮
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET); //A0灯灭,同时B0亮
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); //B0灯灭,同时C15灯亮
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//C15灯灭然后开始循环
结果如图:
2.2仿真波形
和上一个博客相同,首先点击锤子,然后点击debug,选择use simulator就可以开始仿真了
然后调出逻辑窗口添加管脚号:
开始仿真得到波形图:
2.3烧录演示
然后就可以烧录了,将板子与电脑相连,使用FLYMCU进行烧录:
三、stm32usart串口通信
3.1、要求:
(1)设置波特率为115200,1位停止位,无校验位。
(2)STM32系统给上位机(win10)连续发送“hello windows!”,上位机接收程序可以使用“串口调试助手“,也可自己编程。
(3)当上位机给stm32发送“Stop,stm32”后,stm32停止发送。
main.c
#include "stm32f10x.h"
void Delay_ms(volatile unsigned int t)
{
unsigned int i,n;
for(n=0;n<t;n++)
for(i=0;i<800;i++);
}
void SysTick_Handler(void)
{
}
//中断服务函数,前面在User_USART.c void User_USART_Config(void)函数中
//USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);使能了数据接收中断,所以
//将处理接收数据时的中断服务
int i=0;
uint8_t a[11];
void USART1_IRQHandler(void)
{
//uint8_t temp;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
a[i++] = USART_ReceiveData(USART1);
//USART_SendData(USART1, a[i-1]);
}
if(a[0]=='S'&&a[1]=='t'&&a[2]=='o'&&a[3]=='p'&&a[4]==','&&a[5]=='s'&&a[6]=='t'&&a[7]=='m'&&a[8]=='3'&&a[9]=='2')
while(1);
}
void User_USART_Send_Byte(USART_TypeDef* pUSARTX, uint8_t Data)
{
//向数据寄存器写入8bit数据
pUSARTX->DR = (Data & (uint16_t)0x01FF);
//USART_GetFlagStatus检查数据是否发送完成
while(USART_GetFlagStatus(pUSARTX, USART_FLAG_TXE) == RESET);
}
//向串口发送一个字符串数据,即可以发送包含多个字节的数据,char类型为8bit,其字符串中的每个字符都可用一个int数表示,即ASCII标准
void User_UART_Send_String(USART_TypeDef* pUSARTX, char* str)
{
unsigned int i = 0;
do
{
User_USART_Send_Byte(pUSARTX, *(str + i));
i++;
}
while(*(str+i)!='\0');
//USART_GetFlagStatus检查多个数据是否发送完成
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
int main(void)
{
User_USART_GPIO_Config();
User_NVIC_Config();
User_USART_Config();
User_UART_Send_String(USART1, "abcdefg!\n");
while(1)
{
User_UART_Send_String(USART1, "hello windows!\n");
Delay_ms(5000);
}
}
3.2、烧录
将改好的程序仿真后烧录进芯片中(用FLYMCU)
运行成功后,打开野火多功能调试助手运行(首先要下载一个压缩包,然后解压就可以直接运行了),点击打开串口,就会发现芯片一直在发送hello,window
四、 总结
用STM32CubeMx直接生成工程是真的方便了很多,免去了很多我们很多的精力,通过这个实验差不多能比较熟练的使用stm32cubemx。
五、参考文献
(53条消息) STM32USART串口通信_txmnQAQ的博客-CSDN博客
(53条消息) STM32串口通讯发送hello windows_eininbebop的博客-CSDN博客
(53条消息) STM32的USART串口通信_m0_47159351的博客-CSDN博客