跑马灯实验
1.寄存器版本
#include "sys.h"
#include "delay.h"
#include "usart.h"
int main(void)
{
HAL_Init();
Stm32_Clock_Init(360,25,2,8);
delay_init(180);
RCC->AHB1ENR |= 1<<1; //相当于RCC->AHB1ENR = 0x02,这样做不会使其其他位失效
GPIOB->MODER=0X00000005;
GPIOB->OTYPER=0x00000000;
GPIOB->OSPEEDR=0x0000000F;
GPIOB->PUPDR=0x00000005;
while(1)
{
GPIOB->BSRR=0x00000003;//两个IO口同时输出高电平1
delay_ms(500);
GPIOB->BSRR=0x00030000;//两个IO口同时输出低电平0
delay_ms(500);
}
}
2.HAL库版本
#include "sys.h"
#include "delay.h"
#include "usart.h"
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //设置时钟,180MHz
delay_init(180);
__HAL_RCC_GPIOB_CLK_ENABLE();//使能PB时钟
GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP;//推挽输出
GPIO_InitStructure.Pin=GPIO_PIN_0|GPIO_PIN_1;
GPIO_InitStructure.Pull=GPIO_PULLUP;//上拉
GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;//高速
HAL_GPIO_Init(GPIOB,&GPIO_InitStructure);
while(1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);//PB0=0
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);//PB1=0
delay_ms(500);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);//PB0=1
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);//pb1=1
delay_ms(500);
}
}
串口发送实验
1.HAL库版本
#include "sys.h"
#include "delay.h"
#include "usart.h"
UART_HandleTypeDef usart1_handler;
void uart1_init()
{
usart1_handler.Instance=USART1;
usart1_handler.Init.BaudRate=115200;
usart1_handler.Init.WordLength=UART_WORDLENGTH_8B;
usart1_handler.Init.StopBits=UART_STOPBITS_1;
usart1_handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;
usart1_handler.Init.Mode=UART_MODE_TX_RX;
usart1_handler.Init.Parity=USART_PARITY_NONE;
HAL_UART_Init(&usart1_handler);
}
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
GPIO_InitTypeDef GPIO_Initure;
if(huart->Instance==USART1)
{
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
__HAL_RCC_USART1_CLK_ENABLE(); //使能USART1时钟
GPIO_Initure.Pin=GPIO_PIN_9; //PA9
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
GPIO_Initure.Alternate=GPIO_AF7_USART1; //复用为USART1
HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA9
GPIO_Initure.Pin=GPIO_PIN_10; //PA10
HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA10
}
}
int main(void)
{
u8 buff[]="test";
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //设置时钟,180MHz
delay_init(180);
uart1_init();
while(1)
{
HAL_UART_Transmit(&usart1_handler,buff,sizeof(buff),1000);
delay_ms(300);
}
}