[mw_shl_code=c,true]#include <misc.h>
#include <core_cm3.h>
#include <stm32f10x.h>
#include <stdio.h>
void led_init()
{
GPIO_InitTypeDef initType;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
initType.GPIO_Mode = GPIO_Mode_Out_PP;
initType.GPIO_Pin = GPIO_Pin_2;
initType.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&initType);
initType.GPIO_Pin = GPIO_Pin_8;
GPIO_Init(GPIOA,&initType);
}
void led_on()
{
GPIO_WriteBit(GPIOA,GPIO_Pin_8,Bit_RESET);
GPIO_WriteBit(GPIOD,GPIO_Pin_2,Bit_RESET);
}
void led_off()
{
GPIO_WriteBit(GPIOA,GPIO_Pin_8,Bit_SET);
GPIO_WriteBit(GPIOD,GPIO_Pin_2,Bit_SET);
}
void myuart_init()
{
GPIO_InitTypeDef gpio;
USART_InitTypeDef usart;
NVIC_InitTypeDef nvic;
//GPIO时钟初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//串口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
//串口复位
USART_DeInit(USART1);
gpio.GPIO_Mode = GPIO_Mode_AF_PP; //推挽复用输出
gpio.GPIO_Pin = GPIO_Pin_9; //TXD
gpio.GPIO_Speed = GPIO_Speed_10MHz;
//GPIO初始化
GPIO_Init(GPIOA,&gpio);
gpio.GPIO_Pin = GPIO_Pin_10; //RXD
gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
//GPIO初始化
GPIO_Init(GPIOA,&gpio);
usart.USART_BaudRate = 9600;
usart.USART_WordLength = USART_WordLength_8b;
usart.USART_StopBits = USART_StopBits_1;
usart.USART_Parity = USART_Parity_No;
usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
//串口初始化
USART_Init(USART1,&usart);
nvic.NVIC_IRQChannel = USART1_IRQn;
nvic.NVIC_IRQChannelCmd = ENABLE;
nvic.NVIC_IRQChannelPreemptionPriority = 3; //抢占优先级
nvic.NVIC_IRQChannelSubPriority = 3; //子优先级
//初始化 NVIC
NVIC_Init(&nvic);
//开启中断
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
//使能串口
USART_Cmd(USART1,ENABLE);
}
void USART1_IRQHandler()
{
if( RESET != USART_GetITStatus(USART1,USART_IT_RXNE) )
{
u8 data = USART_ReceiveData(USART1);
//USART_SendData(USART1,data);
if(data == 48) //ascii 码 0
{
led_on();
}
if(data == 49) //ascii 码 1
{
led_on();
}
printf("receive data: %d",data);
}
}
int main(void)
{
led_init();
myuart_init();
led_on();
while(1)
{
}
//return 0;
}[/mw_shl_code]
|