- 2024-08-07
-
回复了主题帖:
lt3763电流无法提高
qwqwqw2088 发表于 2024-8-7 08:52
多少A的电流
测一下PWM有没有
1.056A电流,PWM直接接入的intvcc,我打算重画了,感觉有点像输出端的限流电阻的原因我直接飞线电流降低了
- 2024-08-06
-
发表了主题帖:
lt3763电流无法提高
大家有没有遇到过lt3763驱动大功率led灯电流无法上来的问题
-
回复了主题帖:
LM2596和AMS1117电源转换芯片时没有输出
你的1117 3V3电压为什么要接贴片电解电容的负极到地
- 2024-03-15
-
回复了主题帖:
【国民技术车规MCU N32A455开发板】测评 - 4 - 中景园TFT_LCD移植+SPI2测试
秦天qintian0303 发表于 2024-3-11 11:41
淘宝好好找,一定会发现好东西的
现在不中了,我之前买的那个屏幕现在要我运费了
- 2024-03-11
-
回复了主题帖:
【国民技术车规MCU N32A455开发板】测评 - 4 - 中景园TFT_LCD移植+SPI2测试
秦天qintian0303 发表于 2024-3-8 14:56
我自己玩常用的是一个1.54寸,240*240的,支持SPI和8080通信的,10元左右
你这个怪便宜嘞
-
回复了主题帖:
【国民技术车规MCU N32A455开发板】测评 - 4 - 中景园TFT_LCD移植+SPI2测试
裴红恩 发表于 2024-3-8 11:35
这个屏幕是我找的彩屏中最便宜的
我买的时候12包邮1.8寸的
- 2024-03-08
-
回复了主题帖:
【国民技术车规MCU N32A455开发板】测评 - 4 - 中景园TFT_LCD移植+SPI2测试
秦天qintian0303 发表于 2024-3-7 17:24
ST7735S在小屏应用中太广泛了,主要还是SPI的实现
这个屏幕是我找的彩屏中最便宜的
- 2024-03-07
-
回复了主题帖:
【国民技术车规MCU N32A455开发板】 spi2问题贴
尹小舟 发表于 2024-3-7 09:32
问题已经找到了
是引脚映射问题,这里要改一下引脚映射
可以使用这个函数
GPIO_ConfigPinRe ...
我这边没有管脚复用,正常就运行成功了
-
回复了主题帖:
【国民技术车规MCU N32A455开发板】测评 - 4 - 中景园TFT_LCD移植+SPI2测试
lugl4313820 发表于 2024-3-7 06:54
拍照 时,背景也清理一下,这样的作品最后评分会很低。屏已经驱动了,能不能根据中景园的一些基本测试的例 ...
我这边找找这些例程
-
回复了主题帖:
【国民技术车规MCU N32A455开发板】测评 - 4 - 中景园TFT_LCD移植+SPI2测试
lugl4313820 发表于 2024-3-7 06:51
建议增加移植的文字介绍,比如屏的时序、极性如何设置。还有拍图片时,最好与开发板一起拍,拍正面呀。你这 ...
好的好的
- 2024-03-06
-
发表了主题帖:
【国民技术车规MCU N32A455开发板】测评 - 4 - 中景园TFT_LCD移植+SPI2测试
本帖最后由 裴红恩 于 2024-3-7 14:47 编辑
# 【国民技术车规MCU N32A455开发板】测评 - 4 - 中景园TFT_LCD移植+SPI2测试
之前就移植过中景园LCD的驱动到GD32系列的单片机上,这次在测试SPI接口的时候直接驱动一下LCD屏幕并且将过程完整的记录下来
### STEP one:
ST7735S是一块1.8英寸采用SPI通信的TFT全彩屏,分辨率是128*160,这里采用RGB565 16bit的色块编译模式(RGB565即高五位为Red,第五位为Blue,中间六位为Green,共16位)。
BLK:背光开光引脚
CS:片选信号
DC:数据模式选择信号 1为写命令/0为写数据
RST:复位信号
SDA:SPI数据线
SCL:SPI时钟线
VDD:兼容+5V和+3.3V
GND:接地
简单介绍一下驱动的运行过程,首先是进行一次屏幕复位,清除所有的信号
根据数据手册我们可以知道复位时间需要低电平并且最少持续10us以上,取消复位需要等到电平置高以后120ms以后
```c
LCD_RES_Clr();//信号电平从高到低
delay_ms(100);//复位打开延时
LCD_RES_Set();//信号电平从低到高
delay_ms(120);//复位取消延时
```
打开背光,因为LCD屏幕本身是不会如同LED屏幕一样发光的将BL位电平置高
```c
LCD_BLK_Set();//打开背光
```
接下来开始进行参数的配置,写数据0x11退出休眠模式
由上图可以知道当处于Sleep Out由于寄存器的下载以及自诊断需要在120ms以后在进行其他的操作
```c
LCD_WR_REG(0x11); //Sleep out
delay_ms(120); //Delay 120ms
```
由上图可知我们的数据位选择的是16bit,所以对于串行信号是如此写入的,cs保持低电平,scl写入数据是为低电平,dc保持低电平为写入命令
```c
void LCD_Writ_Bus(u8 dat)
{
u8 i;
LCD_CS_Clr();
for(i=0;i
-
回复了主题帖:
【国民技术车规MCU N32A455开发板】 spi2问题贴
哥们移植成功没,我这边出图像了
-
回复了主题帖:
【国民技术车规MCU N32A455开发板】 spi2问题贴
尹小舟 发表于 2024-3-6 10:41
我把SPI_FLASH的例程改到SPI2上,结果也无效,添加了GPIO_ConfigPinRemap(GPIO_RMP1_SPI2, ENABLE); 或GPIO ...
spi1的时钟路线是APB2,SPI2的话是APB1
-
回复了主题帖:
【国民技术车规MCU N32A455开发板】 spi2问题贴
尹小舟 发表于 2024-3-6 10:39
我是使用SPI1 是可以正常显示的, 但是用SPI2 不可以
引脚时钟需要改一下
-
回复了主题帖:
【国民技术车规MCU N32A455开发板】 spi2问题贴
我个人感觉应该是lcd屏初始化的时候出了一点问题,我之前移植其它单片机的时候遇到过,另外他的flash用spi2肯定不行因为这玩意w25q128是通过导线连接在一起的吧
- 2024-03-02
-
发表了主题帖:
【国民技术车规MCU N32A455开发板】测评 - 3 - FreeRTOS系统初步移植+简单运行
# 【国民技术车规MCU N32A455开发板】测评 - 3 - FreeRTOS系统初步移植+简单运行
之前一直在使用FreeRTOS,不过自己从来没有向一个单片机从头新建一个操作系统环境,将自己本次使用这个开发板搭建FreeRTOS的环境的过程记录下来。
### STEP one:
首先的第一步搭建裸机keil开发环境新建六个文件夹分别是EWARM没用感觉可以删了,firmware文件夹存放一些N32A455单片机的头文件以及一些底层驱动,freertos存放来自freertos的内核代码,MDK—ARM存keil的工程文件,inc和src分别存放main等函数,新建完以后使用keil的project的new project选中MDK—ARM文件夹将在这个文件夹中新建工程。
之后打开keil工程点击manage project itms 进入包管理按照一下进行添入
之后在添加文件夹识别路径,稳妥起步尽量添加每一个文件夹省的到时候找不到
之后调用xTaskCreate创建任务创建三个任务
```c
void start_task(void *pvParameters)
{
taskENTER_CRITICAL(); /* 进入临界区 */
/* 创建任务1 */
xTaskCreate((TaskFunction_t )task1, /* 任务函数 */
(const char* )"task1", /* 任务名称 */
(uint16_t )TASK1_STK_SIZE, /* 任务堆栈大小 */
(void* )NULL, /* 传入给任务函数的参数 */
(UBaseType_t )TASK1_PRIO, /* 任务优先级 */
(TaskHandle_t* )&Task1Task_Handler); /* 任务句柄 */
/* 创建任务2 */
xTaskCreate((TaskFunction_t )task2, /* 任务函数 */
(const char* )"task2", /* 任务名称 */
(uint16_t )TASK2_STK_SIZE, /* 任务堆栈大小 */
(void* )NULL, /* 传入给任务函数的参数 */
(UBaseType_t )TASK2_PRIO, /* 任务优先级 */
(TaskHandle_t* )&Task2Task_Handler); /* 任务句柄 */
/* 创建任务3 */
xTaskCreate((TaskFunction_t )task3, /* 任务函数 */
(const char* )"task3", /* 任务名称 */
(uint16_t )TASK3_STK_SIZE, /* 任务堆栈大小 */
(void* )NULL, /* 传入给任务函数的参数 */
(UBaseType_t )TASK3_PRIO, /* 任务优先级 */
(TaskHandle_t* )&Task3Task_Handler); /* 任务句柄 */
vTaskDelete(StartTask_Handler); /* 删除开始任务 */
taskEXIT_CRITICAL(); /* 退出临界区 */
}
```
通过vTaskStartScheduler();启动 RTOS 调度器
通过vTaskDelay函数取消堵塞多长时间进入一次
- 2024-02-26
-
发表了主题帖:
国民技术车规MCU N32A455开发板测评 - 2 - uart串口通讯+mqtt初连百度智能云
# 国民技术车规MCU N32A455开发板测评 - 2 - uart串口通讯+mqtt初连百度智能云
>你好!这边之前通过阿里智能云社区中的帖子搞过关于stm32f103c8t6连接到百度智能云不过没有很好的记录下来,这次通过这次机会将其完整的记录下来。
编程软件keil5 串口调试工具usb转ttl 串口上位机sscom
## STEP one:
>我们首先需要完成的是关于串口的发送以及中断接收
#### 1.串口的初始化
```c
/**
* @brief Configures the different system clocks.
*/
void RCC_Configuration(void)
{
/* Enable GPIO clock */
GPIO_APBxClkCmd(USARTx_GPIO_CLK | RCC_APB2_PERIPH_AFIO, ENABLE);
/* Enable USARTy and USARTz Clock */
USART_APBxClkCmd(USARTx_CLK, ENABLE);
}
```
>APB2 外设时钟使能寄存器的操作
USARTx_GPIO_CLK所定义的内容是
RCC_APB2_PERIPH_AFIO所定义的内容是
通过查询数据手册可以得知这时钟的第一步是使能GPIO端的A时钟与AFIO时钟
第二步是初始化usart时钟
```c
void GPIO_Configuration(void)
{
GPIO_InitType GPIO_InitStructure;//定义引脚初始化结构体
/* Configure USARTy Rx as input floating */
GPIO_InitStructure.Pin = USARTx_RxPin;//Pa10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitPeripheral(USARTy_GPIO, &GPIO_InitStructure);
/* Configure USARTy Tx as alternate function push-pull */
GPIO_InitStructure.Pin = USARTx_TxPin;//Pa9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitPeripheral(USARTy_GPIO, &GPIO_InitStructure);
}
```
其中IO的配置在代码中是由GPIO_ModeType这个结构体表示的:
```c
typedef enum
{
GPIO_Mode_AIN = 0x0,//模拟模式 0000
GPIO_Mode_IN_FLOATING = 0x04,//浮空输入0100
GPIO_Mode_IPD = 0x28,//下拉输入1000 0
GPIO_Mode_IPU = 0x48,//上拉输入1000 1
GPIO_Mode_Out_OD = 0x14,//开漏输出
GPIO_Mode_Out_PP = 0x10,//推挽输出
GPIO_Mode_AF_OD = 0x1C,//复用开漏输出
GPIO_Mode_AF_PP = 0x18//复用推挽输出
} GPIO_ModeType;
```
在通过查询手册可知PA9是串口一的TX采用复用推挽输出PA10是串口的RX采用的是浮空输入
```c
/* USARTy and USARTz configuration ------------------------------------------------------*/
USART_InitStructure.BaudRate = 115200;//串口工作速率设置后期与PC端串口调试工具调试的时候需要对上这个波特率
USART_InitStructure.WordLength = USART_WL_8B;//发送与接收的数据位数
USART_InitStructure.StopBits = USART_STPB_1;//停止位
USART_InitStructure.Parity = USART_PE_NO;//奇偶校验位
USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;//是否开启硬件流控制
USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;//接收模式开启参数
/* Configure USARTx */
USART_Init(USARTx, &USART_InitStructure);//将所有参数进行输入进行初始化
```
串口接收中断的初始化
```c
void NVIC_Configuration(void)
{
NVIC_InitType NVIC_InitStructure;
/* Configure the NVIC Preemption Priority Bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//设置0bit抢占优先级4bit优先级为首要优先级
/* Enable the USARTy Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USARTx_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
```
#### 2.串口的发送与接收
发送,通过重写串口发送函数
//串口1发送的重写
```c
//串口1发送的重写
void Usart1_SendByte(u8 val)
{
USART_SendData(USART1, (uint8_t)val);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXDE) == RESET);
}
void Usart1_SendBuf(u8 *buf,u8 len)
{
while(len--) Usart1_SendByte(*buf++);
}
void Usart1_SendString(char *str)
{
while(*str) Usart1_SendByte(*str++);
}
```
在while函数中调用结果如下
中断函数中进行中断接收
```c
void USARTx_IRQHandler(void)
{
if (USART_GetIntStatus(USART1, USART_INT_RXDNE) != RESET)
{
rxbuf[RxCounter1++] = USART_ReceiveData(USART1);
if(rxbuf[RxCounter1] == 0x02 && rxbuf[RxCounter1-1] == 0x20)
{
mqtt_flag = 1;
}
rxarray[RxCounter1-1] = rxbuf[RxCounter1-1];
}
if(RxCounter1 == 200)
{
RxCounter1 = 0;
}
// if (RxCounter1 == 100)
// {
// /* Disable the USARTy Receive interrupt */
// USART_ConfigInt(USART1, USART_INT_RXDNE, DISABLE);
// }
}
```
结果如下图
## STEP tow:
```c
//连接热点
u8 wifi_state = 0;
void Wifi_Init(void)
{
while(wifi_state < 3)
{
wifi_state = 0;
if(_net.Init(rxbuf,sizeof(rxbuf),txbuf,sizeof(txbuf))!=0)//如果初始化返回为0的话说明esp8266没有连接好
{
wifi_state++;
}
if(_net.ConnectAP(WIFI_NAME,WIFI_PASSWD)!=0)//连接热点
{
wifi_state++;
}
if(_net.ConnectServer("TCP",MQTT_BROKERADDRESS,1883)!=0)//构建TCP通讯线路
{
wifi_state++;
}
}
}
u8 mqtt_state = 0;
void Mqtt_Init(void)
{
while(mqtt_state < 2)
{
mqtt_state = 0;
_mqtt.Init(rxbuf,sizeof(rxbuf),txbuf,sizeof(txbuf));
if(_mqtt.Connect(
MQTT_CLIENTID, //ClientID
MQTT_USARNAME, //Username
MQTT_PASSWD //Password
) != 0)
{
mqtt_state++;
}
if(_mqtt.SubscribeTopic(MQTT_SUBSCRIBE_TOPIC,0,1) != 0)
{
mqtt_state++;
}
}
}
```
- 2024-02-19
-
回复了主题帖:
国民技术车规MCU N32A455开发板测评 - 1 - IO输入输出+板子简单介绍
nmg 发表于 2024-2-18 18:20
板卡是你的朋友,玩的如何了,继续来分享哈
好的,最近在移植esp8266-s1 wifi模块连接板卡到百度智能云
- 2024-02-11
-
回复了主题帖:
国民技术车规MCU N32A455开发板测评 - 1 - IO输入输出+板子简单介绍
1nnocent 发表于 2024-2-10 21:31
看来ee的坛友都不过年
没有朋友,没事干
- 2024-02-10
-
发表了主题帖:
国民技术车规MCU N32A455开发板测评 - 1 - IO输入输出+板子简单介绍
本帖最后由 裴红恩 于 2024-2-10 20:22 编辑
感谢论坛以及国民技术车规MCU提供的N32A455开发板的试用机会。
STEP 1:板子开箱-N32A455开发板一块+usb转Mini 5p数据线一根
STEP 2:开发板基本情况介绍
Modu 1:Mini母座连接N32G452CCL7单片机,此单片机内部集成有usb通讯接口,作为一个烧写器连接N32A455。(程序烧录调试正常,烧录与调试时候将Boot0连接与GND)
Modu 2:N32G452CCL7串口与N32A455烧写口需要短接,以及MCU3.3V以及Modu 4模块中产生的3.3V需短接。
Modu 3:Modu 4模块中产生的3.3V电源以及GND。
Modu 4:MP2359-DJ模块将12V电源转化为5V,ASM1117将5V转化为3.3V以及一个5V到ASM1117的开关(电源模块电压正常)
Modu 5:直接可以通过外部的jlink以及其他的烧写器进行程序的烧录与调试。(外部jlink连接烧录正常)
Modu 6:五个按键,一个复位按键,一个按键按下连接3.3V,三个按键按下时连接一个电阻到GND。(按键可以正常使用)
(温馨提示:烧录程序时记得将Boot改变一下)
STEP 3: IO输入输出实现简单的按键控制三色LED变色(依据官方例程更改而来)
Modu 1:IO输入采用的是n32a455_gpio头文件中的GPIO_ReadInputDataBit引脚电平读取函数,在LedKeyInit函数中进行引脚的初始化具体如:
void LedKeyInit(void)
{
GPIO_InitType GPIO_InitStructure;//定义引脚初始化结构体
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOA));
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
GPIO_InitStructure.Pin = GPIO_PIN_0;//引脚名
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//工作模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
}
Modu 2:IO口的输出采用的是对寄存器PBC以及PBSC进行操作来改变引脚电平的输出,引脚电平变低通过LedOn,引脚输出变高通过LedOff,LED引脚初始化通过LedInit函数。
/**
* [url=home.php?mod=space&uid=159083]@brief[/url] Turns selected Led on.
* @param GPIOx x can be A to G to select the GPIO port.
* @param Pin This parameter can be GPIO_PIN_0~GPIO_PIN_15.
*/
void LedOn(GPIO_Module* GPIOx, uint16_t Pin)
{
GPIOx->PBC = Pin;
}
/**
* @brief Turns selected Led Off.
* @param GPIOx x can be A to G to select the GPIO port.
* @param Pin This parameter can be GPIO_PIN_0~GPIO_PIN_15.
*/
void LedOff(GPIO_Module* GPIOx, uint16_t Pin)
{
GPIOx->PBSC = Pin;
}
/**
* @brief Configures LED GPIO.
* @param GPIOx x can be A to G to select the GPIO port.
* @param Pin This parameter can be GPIO_PIN_0~GPIO_PIN_15.
*/
void LedInit(GPIO_Module* GPIOx, uint16_t Pin)
{
GPIO_InitType GPIO_InitStructure;
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
/* Enable the GPIO Clock */
if (GPIOx == GPIOA)
{
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
}
else if (GPIOx == GPIOB)
{
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);
}
else if (GPIOx == GPIOC)
{
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC, ENABLE);
}
else if (GPIOx == GPIOD)
{
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOD, ENABLE);
}
else if (GPIOx == GPIOE)
{
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOE, ENABLE);
}
else
{
}
/* Configure the GPIO pin */
if (Pin <= GPIO_PIN_ALL)
{
GPIO_InitStructure.Pin = Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitPeripheral(GPIOx, &GPIO_InitStructure);
}
}
STEP 3:main函数如下所示
int main(void)
{
LedInit(PORT_GROUP2, LED1_PIN | LED2_PIN);//初始化led引脚PA11 PA12
LedInit(PORT_GROUP1, LED6_PIN);//初始化led引脚PB10
LedKeyInit();//初始化按键输入引脚PA0
LedOn(PORT_GROUP2, LED1_PIN);//打开红色
LedOff(PORT_GROUP2, LED2_PIN);//关闭绿色
LedOff(PORT_GROUP1, LED6_PIN);//关闭蓝色
while (1)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_PIN_0) == 1 && keyFlag == 1)//获取引脚的电压至并且防止长时间按下变色以及防抖
{
Delay(0x28FFFF);
if(GPIO_ReadInputDataBit(GPIOA, GPIO_PIN_0) == 1 && keyFlag == 1)
{
keyFlag = 0;//一次按下不可重复二次进入
++ledFlag;//色彩变化
if(ledFlag >= 3)
{
ledFlag = 0;
}else{}
switch(ledFlag)
{
case 0:
{
LedOff(PORT_GROUP2, LED2_PIN);
LedOff(PORT_GROUP1, LED6_PIN);
LedOn(PORT_GROUP2, LED1_PIN);
break;
}
case 1:
{
LedOff(PORT_GROUP2, LED1_PIN);
LedOff(PORT_GROUP1, LED6_PIN);
LedOn(PORT_GROUP2, LED2_PIN);
break;
}
case 2:
{
LedOff(PORT_GROUP2, LED1_PIN|LED2_PIN);
LedOn(PORT_GROUP1, LED6_PIN);
break;
}
default:break;
}
}
}else if(GPIO_ReadInputDataBit(GPIOA, GPIO_PIN_0) == 0 && keyFlag == 0){
keyFlag = 1;
}else{}
}
}