1、设置pwm dma配置
-
/* Private function prototypes -----------------------------------------------*/
-
void SystemClock_Config(void);
-
/* USER CODE BEGIN PFP */
-
-
/* USER CODE END PFP */
-
-
/* Private user code ---------------------------------------------------------*/
-
/* USER CODE BEGIN 0 */
-
-
uint16_t buffer[
10];
-
-
/* USER CODE END 0 */
-
-
/**
-
* @brief The application entry point.
-
* @retval int
-
*/
-
int main(void)
-
{
-
/* USER CODE BEGIN 1 */
-
-
/* USER CODE END 1 */
-
-
/* MCU Configuration--------------------------------------------------------*/
-
-
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
-
HAL_Init();
-
-
/* USER CODE BEGIN Init */
-
-
/* USER CODE END Init */
-
-
/* Configure the system clock */
-
SystemClock_Config();
-
-
/* USER CODE BEGIN SysInit */
-
-
/* USER CODE END SysInit */
-
-
/* Initialize all configured peripherals */
-
MX_GPIO_Init();
-
MX_DMA_Init();
-
MX_TIM2_Init();
-
/* USER CODE BEGIN 2 */
-
-
for(
int i =
0;i<
10;i++)
-
{
-
buffer[i] =
20 + i*
5;
-
}
-
-
/* USER CODE END 2 */
-
-
/* Infinite loop */
-
/* USER CODE BEGIN WHILE */
-
while (
1)
-
{
-
-
HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_1, (
uint32_t *)&buffer,
10);
-
-
/* USER CODE END WHILE */
-
-
/* USER CODE BEGIN 3 */
-
}
-
/* USER CODE END 3 */
-
}
示波器波形如图:
不过我数组定义的是 uint16_t buffer[10];
数组初始化累加
-
for(int
i
=
0
;i<10;i++)
-
{
-
buffer[
i]
=
20
+
i*5;
-
}
数据发送是
HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_1, (uint32_t *)&buffer,10);
按照道理 是10个方波 周期是 800k 【mcu 主频64M】
10个占空比依次增大。但是上图的现象不是这样的。
本着求知的心态,希望找出问题
首先 我们设置了uint16 的数组,也设置了dma 半字的传输方式,按理来说应该是正常的输出波形
难道是HAL_TIM_PWM_Start_DMA 这个 (uint32_t *) 字符指针?我修改成 void * 波形也没有变化,我查了网上的资料,这个可以不用管。
主要是dma传输 设置 和数组定义。
后面在网上找到问题的解决方法。
-
for(int
i
=
0
;i<10;i++)
-
{
-
buffer[
i]
=
20
+
i*5;
-
}
-
buffer[9]
=
0
;
定义的传输数组的最后一个数组,设置为零,这样传输数据就可以正常现象了。
【比如需要10个字符,可以定义11个,最后一个设置为0就好了】
转载:https://blog.csdn.net/penglijiang/article/details/116706946
查看评论