一、搭载stm32的开发环境即安装STM32CubeMX
1、安装jdk
由于STM32CubeMX是Java实现的,需要安装jdk环境.
二、利用CubeMX新建工程点亮LED灯
1、新建工程
(1)新建工程,选择自己需要的型号
(2) 调式sys接口
(3) 配置引脚,根据上一篇keil5配置引脚,只需要将PA1,PB0,PB5设置为GPIO_Out就行。
(4) 时钟源配置
默认时钟是使用内部RC振荡器。
图示地方改为72回车。
(5)工程管理
所有命名中不要出现中文
左上角点击Code Generator
,进行下一步配置。
右上角点击GENERATE CODE
创建工程,打开工程文件
2、新建代码
1、代码如下
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);
HAL_Delay(1000);
在main.c文件的main函数下的while循环中,添加上方面几行代码即可。
2、编译烧录代码
编译运行没有报错就烧录代码。
3、结果展示
三、MDK5 观察3个GPIO端口的输出波形
1、设置仿真模式
2、编译运行没有错误
3、调式会话
4、打开逻辑分析仪
5、点击setup给逻辑分析仪中添加要观察的IO口
新建输入PORTA.
,PORTB.
出来目标端口,并且设置Display Type为Bit
仿真图如图所示:
四、 串口通信,发送Hello Windows示例
安装驱动软件,要将J-link连接在电脑上才可以安装上。
安装好了检查设备管理器是否有端口。
有端口之后可以参考上方STM32CubeMX代码编写,也可以直接编写。
编译运行没有错误之后烧录至芯片中。
代码参考如下:
usart.c下代码
在SYSTEM组下双击usart.c,uart_init函数
void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
RCC->APB2ENR|=1<<14; //使能串口时钟
GPIOA->CRH&=0XFFFFF00F;//IO状态设置
GPIOA->CRH|=0X000008B0;//IO状态设置
RCC->APB2RSTR|=1<<14; //复位串口1
RCC->APB2RSTR&=~(1<<14);//停止复位
//波特率设置
USART1->BRR=mantissa; // 波特率设置
USART1->CR1|=0X200C; //1位停止,无校验位.
#if EN_USART1_RX //如果使能了接收
//使能接收中断
USART1->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART1_IRQn,2);//组2,最低优先级
#endif
}
在test.c中编写如下代码:
#include "sys.h"
#include "usart.h"
#include "delay.h"
int main(void)
{
u16 t; u16 len; u16 times=0;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,115200); //串口初始化为115200
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3FFF;//得到此次接收到的数据长度
printf("\r\n Hello Windows! \r\n\r\n");
for(t=0;t<len;t++)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);//等待发送结束
}
printf("\r\n\r\n");//插入换行
USART_RX_STA=0;
}else
{
times++;
if(times%200==0)printf("Hello Windows!\r\n");
delay_ms(10);
}
}
}
编译后成功烧录
五、根据上方事例,观察PA9、PA10波形