本帖最后由 serialworld 于 2018-10-30 20:21 编辑
使用arm-gcc编译器,TrueStudio IDE集成开发环境。直接使用STM32F103的启动文件和连接文件,参考MM32官网上下载的DEMO程序,简单修改。使用STM32启动文件时要注意中断函数的命名和MM32库函数的命名不同。例如:串口中断函数STM32定义:
void USART1_IRQHandler(void), 而MM32定义为 void UART1_IRQHandler(void),需要修改对应的启动文件。
include "delay.h"
#include "sys.h"
#include "led.h"
#include "key.h"
#include "uart.h"
#include "uart_nvic.h"
#include
#include
int _write(int32_t fd, char* ptr, int32_t len) {
if (fd == STDOUT_FILENO || fd == STDERR_FILENO) {
int32_t i = 0;
while (i < len) {
while (UART_GetFlagStatus(UART1, UART_IT_TXIEN) == RESET);
UART_SendData(UART1, (uint8_t) ptr[i++]);
// usart_data_transmit(EVAL_COM1, (uint8_t) ptr[i++]);
// while (RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE))
// ;
}
}
return len;
}
int main(void)
{
u8 t=0;
u8 len;
u16 times=0;
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //初始化与按键连接的硬件接口
LED2=0; //点亮LED
// uart_initwBaudRate(115200u);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
uart_nvic_init(115200); //串口初始化为115200
while(1)
{
// t=KEY_Scan(0); //得到键值
if(UART_RX_STA&0x8000)
{
len=UART_RX_STA&0x3fff;//得到此次接收到的数据长度
printf("\r\n your message is \r\n");
for(t=0;t
{
while (UART_GetFlagStatus(UART1, UART_IT_TXIEN) == RESET);
UART_SendData(UART1, (u8)UART_RX_BUF[t]);
}
printf("\r\n\r\n");//插入换行
UART_RX_STA=0;
}else
{
times++;
if(times%5000==0)
{
printf("\r\n Serial port test\r\n");
}
if(times%200==0)printf("please input date\r\n");
if(times%30==0)LED2=!LED2;//闪烁LED,提示系统正在运行.
delay_ms(10);
}
switch(3)
{
case KEY3_PRES:
// LED1=!LED1;
break;
case KEY4_PRES:
LED2=!LED2;
break;
case WKUP_PRES:
// LED2=!LED2;
// LED1=!LED1;
// delay_ms(100);
break;
default:
delay_ms(10);
}
// printf("hello world !!\t\n");
}
}
|