serialworld 发表于 2018-10-30 19:21

MM32F103 点灯和串口实验

<div class='showpostmsg'> 本帖最后由 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 <stdio.h>
#include <unistd.h>

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);
//            usart_data_transmit(EVAL_COM1, (uint8_t) ptr);
//            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<len;t++)
            {
                while (UART_GetFlagStatus(UART1, UART_IT_TXIEN) == RESET);
                UART_SendData(UART1, (u8)UART_RX_BUF);
            }
            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");
    }   
}
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

zxopenljx 发表于 2021-6-11 17:50

<p>感谢楼主分享</p>
页: [1]
查看完整版本: MM32F103 点灯和串口实验